diff options
author | Remco Burema <r.burema@ultimaker.com> | 2021-07-16 09:49:46 +0300 |
---|---|---|
committer | Remco Burema <r.burema@ultimaker.com> | 2021-07-16 09:49:46 +0300 |
commit | 6c08bbfc9d0c9d035a12f0f029215ce9024de329 (patch) | |
tree | 8adf0f8ffadc134b98d6d2335f7fa7d2ccf529a8 | |
parent | 88954922d4fbb6d64981842b4f5b71ddf5a31871 (diff) | |
parent | 6f6d8d0f93927a202d81100cc203364f0aa01314 (diff) |
Merge branch 'master' into libArachne_rebased
122 files changed, 2903 insertions, 520 deletions
diff --git a/cura/Machines/Models/ExtrudersModel.py b/cura/Machines/Models/ExtrudersModel.py index e979a1e848..1aba1d871a 100644 --- a/cura/Machines/Models/ExtrudersModel.py +++ b/cura/Machines/Models/ExtrudersModel.py @@ -215,7 +215,7 @@ class ExtrudersModel(ListModel): "id": "", "name": catalog.i18nc("@menuitem", "Not overridden"), "enabled": True, - "color": "#ffffff", + "color": "transparent", "index": -1, "definition": "", "material": "", diff --git a/cura/UI/TextManager.py b/cura/UI/TextManager.py index 99c1a55d46..77dadae809 100644 --- a/cura/UI/TextManager.py +++ b/cura/UI/TextManager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Ultimaker B.V.
+# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import collections
@@ -6,9 +6,11 @@ from typing import Optional, Dict, List, cast from PyQt5.QtCore import QObject, pyqtSlot
+from UM.i18n import i18nCatalog
from UM.Resources import Resources
from UM.Version import Version
+catalog = i18nCatalog("cura")
#
# This manager provides means to load texts to QML.
@@ -30,32 +32,35 @@ class TextManager(QObject): # Load change log texts and organize them with a dict
try:
file_path = Resources.getPath(Resources.Texts, "change_log.txt")
- except FileNotFoundError:
+ except FileNotFoundError as e:
# I have no idea how / when this happens, but we're getting crash reports about it.
- return ""
+ return catalog.i18nc("@text:window", "The release notes could not be opened.") + "<br>" + str(e)
change_logs_dict = {} # type: Dict[Version, Dict[str, List[str]]]
- with open(file_path, "r", encoding = "utf-8") as f:
- open_version = None # type: Optional[Version]
- open_header = "" # Initialise to an empty header in case there is no "*" in the first line of the changelog
- for line in f:
- line = line.replace("\n", "")
- if "[" in line and "]" in line:
- line = line.replace("[", "")
- line = line.replace("]", "")
- open_version = Version(line)
- if open_version < Version([0, 0, 1]): # Something went wrong with parsing, assume non-numerical alternate version that should be on top.
- open_version = Version([99, 99, 99])
- if Version([14, 99, 99]) < open_version < Version([16, 0, 0]): # Bit of a hack: We released the 15.x.x versions before 2.x
- open_version = Version([0, open_version.getMinor(), open_version.getRevision(), open_version.getPostfixVersion()])
- open_header = ""
- change_logs_dict[open_version] = collections.OrderedDict()
- elif line.startswith("*"):
- open_header = line.replace("*", "")
- change_logs_dict[cast(Version, open_version)][open_header] = []
- elif line != "":
- if open_header not in change_logs_dict[cast(Version, open_version)]:
+ try:
+ with open(file_path, "r", encoding = "utf-8") as f:
+ open_version = None # type: Optional[Version]
+ open_header = "" # Initialise to an empty header in case there is no "*" in the first line of the changelog
+ for line in f:
+ line = line.replace("\n", "")
+ if "[" in line and "]" in line:
+ line = line.replace("[", "")
+ line = line.replace("]", "")
+ open_version = Version(line)
+ if open_version < Version([0, 0, 1]): # Something went wrong with parsing, assume non-numerical alternate version that should be on top.
+ open_version = Version([99, 99, 99])
+ if Version([14, 99, 99]) < open_version < Version([16, 0, 0]): # Bit of a hack: We released the 15.x.x versions before 2.x
+ open_version = Version([0, open_version.getMinor(), open_version.getRevision(), open_version.getPostfixVersion()])
+ open_header = ""
+ change_logs_dict[open_version] = collections.OrderedDict()
+ elif line.startswith("*"):
+ open_header = line.replace("*", "")
change_logs_dict[cast(Version, open_version)][open_header] = []
- change_logs_dict[cast(Version, open_version)][open_header].append(line)
+ elif line != "":
+ if open_header not in change_logs_dict[cast(Version, open_version)]:
+ change_logs_dict[cast(Version, open_version)][open_header] = []
+ change_logs_dict[cast(Version, open_version)][open_header].append(line)
+ except EnvironmentError as e:
+ return catalog.i18nc("@text:window", "The release notes could not be opened.") + "<br>" + str(e)
# Format changelog text
content = ""
diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 1aa6c86dcb..272ad3a7e9 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -4,12 +4,12 @@ import argparse #To run the engine in debug mode if the front-end is in debug mode. from collections import defaultdict import os -from PyQt5.QtCore import QObject, QTimer, pyqtSlot +from PyQt5.QtCore import QObject, QTimer, QUrl, pyqtSlot import sys from time import time from typing import Any, cast, Dict, List, Optional, Set, TYPE_CHECKING -from PyQt5.QtGui import QImage +from PyQt5.QtGui import QDesktopServices, QImage from UM.Backend.Backend import Backend, BackendState from UM.Scene.SceneNode import SceneNode @@ -157,6 +157,18 @@ class CuraEngineBackend(QObject, Backend): self.determineAutoSlicing() application.getPreferences().preferenceChanged.connect(self._onPreferencesChanged) + self._slicing_error_message = Message( + text = catalog.i18nc("@message", "Slicing failed with an unexpected error. Please consider reporting a bug on our issue tracker."), + title = catalog.i18nc("@message:title", "Slicing failed") + ) + self._slicing_error_message.addAction( + action_id = "report_bug", + name = catalog.i18nc("@message:button", "Report a bug"), + description = catalog.i18nc("@message:description", "Report a bug on Ultimaker Cura's issue tracker."), + icon = "[no_icon]" + ) + self._slicing_error_message.actionTriggered.connect(self._reportBackendError) + self._snapshot = None #type: Optional[QImage] application.initializationFinished.connect(self.initialize) @@ -598,10 +610,15 @@ class CuraEngineBackend(QObject, Backend): if error.getErrorCode() not in [Arcus.ErrorCode.BindFailedError, Arcus.ErrorCode.ConnectionResetError, Arcus.ErrorCode.Debug]: Logger.log("w", "A socket error caused the connection to be reset") + elif error.getErrorCode() == Arcus.ErrorCode.ConnectionResetError: + Logger.error("CuraEngine crashed abnormally! The socket connection was reset unexpectedly.") + self._slicing_error_message.show() + self.setState(BackendState.Error) + self.stopSlicing() # _terminate()' function sets the job status to 'cancel', after reconnecting to another Port the job status # needs to be updated. Otherwise backendState is "Unable To Slice" - if error.getErrorCode() == Arcus.ErrorCode.BindFailedError and self._start_slice_job is not None: + elif error.getErrorCode() == Arcus.ErrorCode.BindFailedError and self._start_slice_job is not None: self._start_slice_job.setIsCancelled(False) # Check if there's any slicable object in the scene. @@ -922,9 +939,22 @@ class CuraEngineBackend(QObject, Backend): if not self._restart: if self._process: # type: ignore - Logger.log("d", "Backend quit with return code %s. Resetting process and socket.", self._process.wait()) # type: ignore + return_code = self._process.wait() + if return_code != 0: + Logger.log("e", f"Backend exited abnormally with return code {return_code}!") + self._slicing_error_message.show() + self.setState(BackendState.Error) + self.stopSlicing() + else: + Logger.log("d", "Backend finished slicing. Resetting process and socket.") self._process = None # type: ignore + def _reportBackendError(self, _message_id: str, _action_id: str) -> None: + """ + Triggered when the user wants to report an error in the back-end. + """ + QDesktopServices.openUrl(QUrl("https://github.com/Ultimaker/Cura/issues/new/choose")) + def _onGlobalStackChanged(self) -> None: """Called when the global container stack changes""" diff --git a/plugins/DigitalLibrary/resources/images/projects_not_found.svg b/plugins/DigitalLibrary/resources/images/projects_not_found.svg new file mode 100644 index 0000000000..8aee7b797c --- /dev/null +++ b/plugins/DigitalLibrary/resources/images/projects_not_found.svg @@ -0,0 +1,62 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 378.13 348.13"> + <defs> + <style> + .cls-2,.cls-6{fill:#c5dbfb;} + .cls-3,.cls-5,.cls-8{fill:#fff;} + .cls-3{stroke:#c5dbfb;} + .cls-10,.cls-3,.cls-4,.cls-6,.cls-7,.cls-8{stroke-miterlimit:10;stroke-width:2px;} + .cls-4,.cls-7{fill:#f3f8fe;} + .cls-4{stroke:#f3f8fe;} + .cls-6,.cls-7,.cls-8{stroke:#061884;} + .cls-10{fill:#196ef0;stroke:#196ef0;} + .cls-11{fill:#061884;} + </style> + <clipPath id="clip-path"> + <circle fill="none" cx="155" cy="125" r="80" /> + </clipPath> + </defs> + <path class="cls-2" d="M43,17V3H83a2,2,0,0,1,2,2V17Z" /> + <path class="cls-3" d="M3,1H40L56,17H87a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V3A2,2,0,0,1,3,1Z" /> + <path class="cls-2" d="M153,17V3h40a2,2,0,0,1,2,2V17Z" /> + <path class="cls-3" d="M113,1h37l16,16h31a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H113a2,2,0,0,1-2-2V3A2,2,0,0,1,113,1Z" /> + <path class="cls-2" d="M263,17V3h40a2,2,0,0,1,2,2V17Z" /> + <path class="cls-3" d="M223,1h37l16,16h31a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V3A2,2,0,0,1,223,1Z" /> + <path class="cls-2" d="M43,107V93H83a2,2,0,0,1,2,2v12Z" /> + <path class="cls-3" d="M3,91H40l16,16H87a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V93A2,2,0,0,1,3,91Z" /> + <path class="cls-4" d="M153,107V93h40a2,2,0,0,1,2,2v12Z" /> + <path class="cls-3" d="M113,91h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H113a2,2,0,0,1-2-2V93A2,2,0,0,1,113,91Z" /> + <path class="cls-2" d="M263,107V93h40a2,2,0,0,1,2,2v12Z" /> + <path class="cls-3" d="M223,91h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V93A2,2,0,0,1,223,91Z" /> + <path class="cls-2" d="M43,197V183H83a2,2,0,0,1,2,2v12Z" /> + <path class="cls-3" d="M3,181H40l16,16H87a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V183A2,2,0,0,1,3,181Z" /> + <path class="cls-4" d="M153,197V183h40a2,2,0,0,1,2,2v12Z" /> + <path class="cls-3" d="M113,181h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H113a2,2,0,0,1-2-2V183A2,2,0,0,1,113,181Z" /> + <path class="cls-2" d="M263,197V183h40a2,2,0,0,1,2,2v12Z" /> + <path class="cls-3" d="M223,181h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V183A2,2,0,0,1,223,181Z" /> + <circle class="cls-5" cx="155" cy="125" r="100" /> + <path class="cls-6" d="M351.12,322.62h20a10,10,0,0,1,10,10v7a0,0,0,0,1,0,0h-40a0,0,0,0,1,0,0v-7A10,10,0,0,1,351.12,322.62Z" transform="translate(850.61 309.91) rotate(135)" /> + <rect class="cls-7" x="293.75" y="225.25" width="40" height="117" transform="translate(-108.74 304.96) rotate(-45)" /> + <polyline class="cls-7" points="213.69 199.25 252.58 238.14 267.43 223.29 228.54 184.4" /> + <circle class="cls-8" cx="155" cy="125" r="95" /> + <circle class="cls-8" cx="155" cy="125" r="85" /> + <path class="cls-6" d="M256.37,227.87h20a10,10,0,0,1,10,10v7a0,0,0,0,1,0,0h-40a0,0,0,0,1,0,0v-7a10,10,0,0,1,10-10Z" transform="translate(-89.12 257.58) rotate(-45)" /> + <g clip-path="url(#clip-path)"> + <path class="cls-10" d="M43,17V3H83a2,2,0,0,1,2,2V17Z" /> + <path class="cls-8" d="M3,1H40L56,17H87a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V3A2,2,0,0,1,3,1Z" /> + <path class="cls-10" d="M153,17V3h40a2,2,0,0,1,2,2V17Z" /> + <path class="cls-8" d="M113,1h37l16,16h31a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H113a2,2,0,0,1-2-2V3A2,2,0,0,1,113,1Z" /> + <path class="cls-10" d="M263,17V3h40a2,2,0,0,1,2,2V17Z" /> + <path class="cls-8" d="M223,1h37l16,16h31a2,2,0,0,1,2,2V67a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V3A2,2,0,0,1,223,1Z" /> + <path class="cls-10" d="M43,107V93H83a2,2,0,0,1,2,2v12Z" /> + <path class="cls-8" d="M3,91H40l16,16H87a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V93A2,2,0,0,1,3,91Z" /> + <path class="cls-10" d="M263,107V93h40a2,2,0,0,1,2,2v12Z" /> + <path class="cls-8" d="M223,91h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V93A2,2,0,0,1,223,91Z" /> + <path class="cls-10" d="M43,197V183H83a2,2,0,0,1,2,2v12Z" /> + <path class="cls-8" d="M3,181H40l16,16H87a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V183A2,2,0,0,1,3,181Z" /> + <path class="cls-10" d="M153,197V183h40a2,2,0,0,1,2,2v12Z" /> + <path class="cls-8" d="M113,181h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H113a2,2,0,0,1-2-2V183A2,2,0,0,1,113,181Z" /> + <path class="cls-10" d="M263,197V183h40a2,2,0,0,1,2,2v12Z" /> + <path class="cls-8" d="M223,181h37l16,16h31a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H223a2,2,0,0,1-2-2V183A2,2,0,0,1,223,181Z" /> + <path class="cls-11" d="M149.18,133.69v-3.48a14.36,14.36,0,0,1,1.74-7.25,20.17,20.17,0,0,1,6.4-6.17A25.87,25.87,0,0,0,163,112a7,7,0,0,0,1.48-4.34,4.13,4.13,0,0,0-1.93-3.62,9,9,0,0,0-5.14-1.3,24.94,24.94,0,0,0-7.34,1.16,45.2,45.2,0,0,0-7.78,3.31l-5.37-10.64a48.41,48.41,0,0,1,9.89-4.21,40.25,40.25,0,0,1,11.67-1.61q9.57,0,14.9,4.43a14.16,14.16,0,0,1,5.32,11.41,15.41,15.41,0,0,1-2.55,9,30.38,30.38,0,0,1-7.92,7.34A32.11,32.11,0,0,0,163,127.3a5.91,5.91,0,0,0-1.34,4v2.41Zm-1.61,15.12q0-4.38,2.46-6.12a10,10,0,0,1,5.95-1.75,9.69,9.69,0,0,1,5.77,1.75q2.46,1.74,2.46,6.12,0,4.22-2.46,6a9.42,9.42,0,0,1-5.77,1.84,9.69,9.69,0,0,1-5.95-1.84Q147.57,153,147.57,148.81Z" /> + </g> +</svg> diff --git a/plugins/DigitalLibrary/resources/qml/SelectProjectPage.qml b/plugins/DigitalLibrary/resources/qml/SelectProjectPage.qml index 2de0e78cc7..d184264cde 100644 --- a/plugins/DigitalLibrary/resources/qml/SelectProjectPage.qml +++ b/plugins/DigitalLibrary/resources/qml/SelectProjectPage.qml @@ -1,10 +1,12 @@ // Copyright (C) 2021 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.10 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 as OldControls // TableView doesn't exist in the QtQuick Controls 2.x in 5.10, so use the old one import QtQuick.Controls 2.3 import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.1 import UM 1.2 as UM import Cura 1.6 as Cura @@ -29,31 +31,43 @@ Item margins: UM.Theme.getSize("default_margin").width } - Label + RowLayout { - id: selectProjectLabel - - text: "Select Project" - font: UM.Theme.getFont("medium") - color: UM.Theme.getColor("small_button_text") - anchors.top: parent.top - anchors.left: parent.left - visible: projectListContainer.visible - } + id: headerRow - Cura.SecondaryButton - { - id: createNewProjectButton + anchors + { + top: parent.top + left: parent.left + right: parent.right + } + height: childrenRect.height + spacing: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: selectProjectLabel.verticalCenter - anchors.right: parent.right - text: "New Library project" + Cura.TextField + { + id: searchBar + Layout.fillWidth: true + implicitHeight: createNewProjectButton.height + + onTextEdited: manager.projectFilter = text //Update the search filter when editing this text field. + + leftIcon: UM.Theme.getIcon("Magnifier") + placeholderText: "Search" + } - onClicked: + Cura.SecondaryButton { - createNewProjectPopup.open() + id: createNewProjectButton + + text: "New Library project" + + onClicked: + { + createNewProjectPopup.open() + } + busy: manager.creatingNewProjectStatus == DF.RetrievalStatus.InProgress } - busy: manager.creatingNewProjectStatus == DF.RetrievalStatus.InProgress } Item @@ -76,19 +90,18 @@ Item { id: digitalFactoryImage anchors.horizontalCenter: parent.horizontalCenter - source: "../images/digital_factory.svg" + source: searchBar.text === "" ? "../images/digital_factory.svg" : "../images/projects_not_found.svg" fillMode: Image.PreserveAspectFit width: parent.width - 2 * UM.Theme.getSize("thick_margin").width - sourceSize.width: width - sourceSize.height: height } Label { id: noLibraryProjectsLabel anchors.horizontalCenter: parent.horizontalCenter - text: "It appears that you don't have any projects in the Library yet." + text: searchBar.text === "" ? "It appears that you don't have any projects in the Library yet." : "No projects found that match the search query." font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") } Cura.TertiaryButton @@ -97,6 +110,7 @@ Item anchors.horizontalCenter: parent.horizontalCenter text: "Visit Digital Library" onClicked: Qt.openUrlExternally(CuraApplication.ultimakerDigitalFactoryUrl + "/app/library") + visible: searchBar.text === "" //Show the link to Digital Library when there are no projects in the user's Library. } } } @@ -106,7 +120,7 @@ Item id: projectListContainer anchors { - top: selectProjectLabel.bottom + top: headerRow.bottom topMargin: UM.Theme.getSize("default_margin").height bottom: parent.bottom left: parent.left diff --git a/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py b/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py index b0e34adaba..4ebb3cb051 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py @@ -22,6 +22,7 @@ from .DFFileUploader import DFFileUploader from .DFLibraryFileUploadRequest import DFLibraryFileUploadRequest from .DFLibraryFileUploadResponse import DFLibraryFileUploadResponse from .DFPrintJobUploadRequest import DFPrintJobUploadRequest +from .DigitalFactoryFeatureBudgetResponse import DigitalFactoryFeatureBudgetResponse from .DigitalFactoryFileResponse import DigitalFactoryFileResponse from .DigitalFactoryProjectResponse import DigitalFactoryProjectResponse from .PaginationLinks import PaginationLinks @@ -57,6 +58,27 @@ class DigitalFactoryApiClient: self._projects_pagination_mgr = PaginationManager(limit = projects_limit_per_page) if projects_limit_per_page else None # type: Optional[PaginationManager] + def checkUserHasAccess(self, callback: Callable) -> None: + """Checks if the user has any sort of access to the digital library. + A user is considered to have access if the max-# of private projects is greater then 0 (or -1 for unlimited). + """ + + def callbackWrap(response: Optional[Any] = None, *args, **kwargs) -> None: + if (response is not None and isinstance(response, DigitalFactoryFeatureBudgetResponse) and + response.library_max_private_projects is not None): + callback( + response.library_max_private_projects == -1 or # Note: -1 is unlimited + response.library_max_private_projects > 0) + else: + Logger.warning(f"Digital Factory: Response is not a feature budget, likely an error: {str(response)}") + callback(False) + + self._http.get(f"{self.CURA_API_ROOT}/feature_budgets", + scope = self._scope, + callback = self._parseCallback(callbackWrap, DigitalFactoryFeatureBudgetResponse, callbackWrap), + error_callback = callbackWrap, + timeout = self.DEFAULT_REQUEST_TIMEOUT) + def getProject(self, library_project_id: str, on_finished: Callable[[DigitalFactoryProjectResponse], Any], failed: Callable) -> None: """ Retrieves a digital factory project by its library project id. @@ -73,7 +95,7 @@ class DigitalFactoryApiClient: error_callback = failed, timeout = self.DEFAULT_REQUEST_TIMEOUT) - def getProjectsFirstPage(self, on_finished: Callable[[List[DigitalFactoryProjectResponse]], Any], failed: Callable) -> None: + def getProjectsFirstPage(self, search_filter: str, on_finished: Callable[[List[DigitalFactoryProjectResponse]], Any], failed: Callable) -> None: """ Retrieves digital factory projects for the user that is currently logged in. @@ -81,13 +103,18 @@ class DigitalFactoryApiClient: according to the limit set in the pagination manager. If there is no projects pagination manager, this function leaves the project limit to the default set on the server side (999999). + :param search_filter: Text to filter the search results. If given an empty string, results are not filtered. :param on_finished: The function to be called after the result is parsed. :param failed: The function to be called if the request fails. """ - url = "{}/projects".format(self.CURA_API_ROOT) + url = f"{self.CURA_API_ROOT}/projects" + query_character = "?" if self._projects_pagination_mgr: self._projects_pagination_mgr.reset() # reset to clear all the links and response metadata - url += "?limit={}".format(self._projects_pagination_mgr.limit) + url += f"{query_character}limit={self._projects_pagination_mgr.limit}" + query_character = "&" + if search_filter != "": + url += f"{query_character}search={search_filter}" self._http.get(url, scope = self._scope, diff --git a/plugins/DigitalLibrary/src/DigitalFactoryController.py b/plugins/DigitalLibrary/src/DigitalFactoryController.py index 352a8c70f2..0821cc6925 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryController.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryController.py @@ -1,4 +1,6 @@ # Copyright (c) 2021 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + import json import math import os @@ -8,7 +10,7 @@ from enum import IntEnum from pathlib import Path from typing import Optional, List, Dict, Any, cast -from PyQt5.QtCore import pyqtSignal, QObject, pyqtSlot, pyqtProperty, Q_ENUMS, QUrl +from PyQt5.QtCore import pyqtSignal, QObject, pyqtSlot, pyqtProperty, Q_ENUMS, QTimer, QUrl from PyQt5.QtNetwork import QNetworkReply from PyQt5.QtQml import qmlRegisterType, qmlRegisterUncreatableType @@ -89,6 +91,9 @@ class DigitalFactoryController(QObject): uploadFileError = Signal() uploadFileFinished = Signal() + """Signal to inform about the state of user access.""" + userAccessStateChanged = pyqtSignal(bool) + def __init__(self, application: CuraApplication) -> None: super().__init__(parent = None) @@ -106,12 +111,18 @@ class DigitalFactoryController(QObject): self._has_more_projects_to_load = False self._account = self._application.getInstance().getCuraAPI().account # type: Account + self._account.loginStateChanged.connect(self._onLoginStateChanged) self._current_workspace_information = CuraApplication.getInstance().getCurrentWorkspaceInformation() # Initialize the project model self._project_model = DigitalFactoryProjectModel() self._selected_project_idx = -1 self._project_creation_error_text = "Something went wrong while creating a new project. Please try again." + self._project_filter = "" + self._project_filter_change_timer = QTimer() + self._project_filter_change_timer.setInterval(200) + self._project_filter_change_timer.setSingleShot(True) + self._project_filter_change_timer.timeout.connect(self._applyProjectFilter) # Initialize the file model self._file_model = DigitalFactoryFileModel() @@ -131,6 +142,8 @@ class DigitalFactoryController(QObject): self._application.engineCreatedSignal.connect(self._onEngineCreated) self._application.initializationFinished.connect(self._applicationInitializationFinished) + self._user_has_access = False + def clear(self) -> None: self._project_model.clearProjects() self._api.clear() @@ -143,16 +156,24 @@ class DigitalFactoryController(QObject): self.setSelectedProjectIndex(-1) + def _onLoginStateChanged(self, logged_in: bool) -> None: + def callback(has_access, **kwargs): + self._user_has_access = has_access + self.userAccessStateChanged.emit(logged_in) + + self._api.checkUserHasAccess(callback) + def userAccountHasLibraryAccess(self) -> bool: """ Checks whether the currently logged in user account has access to the Digital Library :return: True if the user account has Digital Library access, else False """ - subscriptions = [] # type: List[Dict[str, Any]] if self._account.userProfile: subscriptions = self._account.userProfile.get("subscriptions", []) - return len(subscriptions) > 0 + if len(subscriptions) > 0: + return True + return self._user_has_access def initialize(self, preselected_project_id: Optional[str] = None) -> None: self.clear() @@ -162,7 +183,7 @@ class DigitalFactoryController(QObject): if preselected_project_id: self._api.getProject(preselected_project_id, on_finished = self.setProjectAsPreselected, failed = self._onGetProjectFailed) else: - self._api.getProjectsFirstPage(on_finished = self._onGetProjectsFirstPageFinished, failed = self._onGetProjectsFailed) + self._api.getProjectsFirstPage(search_filter = self._project_filter, on_finished = self._onGetProjectsFirstPageFinished, failed = self._onGetProjectsFailed) def setProjectAsPreselected(self, df_project: DigitalFactoryProjectResponse) -> None: """ @@ -288,6 +309,38 @@ class DigitalFactoryController(QObject): self._selected_file_indices = file_indices self.selectedFileIndicesChanged.emit(file_indices) + def setProjectFilter(self, new_filter: str) -> None: + """ + Called when the user wants to change the search filter for projects. + + The filter is not immediately applied. There is some delay to allow the user to finish typing. + :param new_filter: The new filter that the user wants to apply. + """ + self._project_filter = new_filter + self._project_filter_change_timer.start() + + """ + Signal to notify Qt that the applied filter has changed. + """ + projectFilterChanged = pyqtSignal() + + @pyqtProperty(str, notify = projectFilterChanged, fset = setProjectFilter) + def projectFilter(self) -> str: + """ + The current search filter being applied to the project list. + :return: The current search filter being applied to the project list. + """ + return self._project_filter + + def _applyProjectFilter(self) -> None: + """ + Actually apply the current filter to search for projects with the user-defined search string. + :return: + """ + self.clear() + self.projectFilterChanged.emit() + self._api.getProjectsFirstPage(search_filter = self._project_filter, on_finished = self._onGetProjectsFirstPageFinished, failed = self._onGetProjectsFailed) + @pyqtProperty(QObject, constant = True) def digitalFactoryProjectModel(self) -> "DigitalFactoryProjectModel": return self._project_model @@ -502,7 +555,7 @@ class DigitalFactoryController(QObject): # false, we also need to clean it from the projects model self._project_model.clearProjects() self.setSelectedProjectIndex(-1) - self._api.getProjectsFirstPage(on_finished = self._onGetProjectsFirstPageFinished, failed = self._onGetProjectsFailed) + self._api.getProjectsFirstPage(search_filter = self._project_filter, on_finished = self._onGetProjectsFirstPageFinished, failed = self._onGetProjectsFailed) self.setRetrievingProjectsStatus(RetrievalStatus.InProgress) self._has_preselected_project = new_has_preselected_project self.preselectedProjectChanged.emit() diff --git a/plugins/DigitalLibrary/src/DigitalFactoryFeatureBudgetResponse.py b/plugins/DigitalLibrary/src/DigitalFactoryFeatureBudgetResponse.py new file mode 100644 index 0000000000..016306a478 --- /dev/null +++ b/plugins/DigitalLibrary/src/DigitalFactoryFeatureBudgetResponse.py @@ -0,0 +1,43 @@ +# Copyright (c) 2021 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from .BaseModel import BaseModel +from typing import Optional + + +class DigitalFactoryFeatureBudgetResponse(BaseModel): + """Class representing the capabilities of a user account for Digital Library. + NOTE: For each max_..._projects fields, '-1' means unlimited! + """ + + def __init__(self, + library_can_use_business_value: Optional[bool] = False, + library_can_use_comments: Optional[bool] = False, + library_can_use_status: Optional[bool] = False, + library_can_use_tags: Optional[bool] = False, + library_can_use_technical_requirements: Optional[bool] = False, + library_max_organization_shared_projects: Optional[int] = False, # -1 means unlimited + library_max_private_projects: Optional[int] = False, # -1 means unlimited + library_max_team_shared_projects: Optional[int] = False, # -1 means unlimited + **kwargs) -> None: + + self.library_can_use_business_value = library_can_use_business_value + self.library_can_use_comments = library_can_use_comments + self.library_can_use_status = library_can_use_status + self.library_can_use_tags = library_can_use_tags + self.library_can_use_technical_requirements = library_can_use_technical_requirements + self.library_max_organization_shared_projects = library_max_organization_shared_projects # -1 means unlimited + self.library_max_private_projects = library_max_private_projects # -1 means unlimited + self.library_max_team_shared_projects = library_max_team_shared_projects # -1 means unlimited + super().__init__(**kwargs) + + def __repr__(self) -> str: + return "max private: {}, max org: {}, max team: {}".format( + self.library_max_private_projects, + self.library_max_organization_shared_projects, + self.library_max_team_shared_projects) + + # Validates the model, raising an exception if the model is invalid. + def validate(self) -> None: + super().validate() + # No validation for now, as the response can be "data: []", which should be interpreted as all False and 0's diff --git a/plugins/DigitalLibrary/src/DigitalFactoryFileProvider.py b/plugins/DigitalLibrary/src/DigitalFactoryFileProvider.py index 7a544afaa1..65a727e21a 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryFileProvider.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryFileProvider.py @@ -22,7 +22,7 @@ class DigitalFactoryFileProvider(FileProvider): self._dialog = None self._account = CuraApplication.getInstance().getCuraAPI().account # type: Account - self._account.loginStateChanged.connect(self._onLoginStateChanged) + self._controller.userAccessStateChanged.connect(self._onUserAccessStateChanged) self.enabled = self._account.isLoggedIn and self._controller.userAccountHasLibraryAccess() self.priority = 10 @@ -53,7 +53,7 @@ class DigitalFactoryFileProvider(FileProvider): if not self._dialog: Logger.log("e", "Unable to create the Digital Library Open dialog.") - def _onLoginStateChanged(self, logged_in: bool) -> None: + def _onUserAccessStateChanged(self, logged_in: bool) -> None: """ Sets the enabled status of the DigitalFactoryFileProvider according to the account's login status :param logged_in: The new login status diff --git a/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py b/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py index 202223f9b4..70e3ac34f2 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryOutputDevice.py @@ -45,7 +45,7 @@ class DigitalFactoryOutputDevice(ProjectOutputDevice): self._writing = False self._account = CuraApplication.getInstance().getCuraAPI().account # type: Account - self._account.loginStateChanged.connect(self._onLoginStateChanged) + self._controller.userAccessStateChanged.connect(self._onUserAccessStateChanged) self.enabled = self._account.isLoggedIn and self._controller.userAccountHasLibraryAccess() self._current_workspace_information = CuraApplication.getInstance().getCurrentWorkspaceInformation() @@ -97,7 +97,7 @@ class DigitalFactoryOutputDevice(ProjectOutputDevice): if not self._dialog: Logger.log("e", "Unable to create the Digital Library Save dialog.") - def _onLoginStateChanged(self, logged_in: bool) -> None: + def _onUserAccessStateChanged(self, logged_in: bool) -> None: """ Sets the enabled status of the DigitalFactoryOutputDevice according to the account's login status :param logged_in: The new login status diff --git a/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py b/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py index ba0a0b15b4..9751838ddf 100644 --- a/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py +++ b/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py @@ -1,3 +1,6 @@ +# Copyright (c) 2021 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + from unittest.mock import MagicMock import pytest @@ -37,7 +40,7 @@ def test_getProjectsFirstPage(api_client): failed_callback = MagicMock() # Call - api_client.getProjectsFirstPage(on_finished = finished_callback, failed = failed_callback) + api_client.getProjectsFirstPage(search_filter = "filter", on_finished = finished_callback, failed = failed_callback) # Asserts pagination_manager.reset.assert_called_once() # Should be called since we asked for new set of projects @@ -45,16 +48,16 @@ def test_getProjectsFirstPage(api_client): args = http_manager.get.call_args_list[0] # Ensure that it's called with the right limit - assert args[0][0] == "https://api.ultimaker.com/cura/v1/projects?limit=20" + assert args[0][0] == "https://api.ultimaker.com/cura/v1/projects?limit=20&search=filter" # Change the limit & try again http_manager.get.reset_mock() pagination_manager.limit = 80 - api_client.getProjectsFirstPage(on_finished = finished_callback, failed = failed_callback) + api_client.getProjectsFirstPage(search_filter = "filter", on_finished = finished_callback, failed = failed_callback) args = http_manager.get.call_args_list[0] # Ensure that it's called with the right limit - assert args[0][0] == "https://api.ultimaker.com/cura/v1/projects?limit=80" + assert args[0][0] == "https://api.ultimaker.com/cura/v1/projects?limit=80&search=filter" def test_getMoreProjects_noNewProjects(api_client): diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py index ab2bcaad5b..e80acc8d94 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py @@ -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. from UM.Logger import Logger @@ -103,20 +103,27 @@ class PerObjectSettingsTool(Tool): new_instance.resetState() # Ensure that the state is not seen as a user state. settings.addInstance(new_instance) - for property_key in ["top_bottom_thickness", "wall_thickness", "wall_line_count"]: + # Override some settings to ensure that the infill mesh by default adds no skin or walls. Or remove them if not an infill mesh. + specialized_settings = { + "top_bottom_thickness": 0, + "top_thickness": "=top_bottom_thickness", + "bottom_thickness": "=top_bottom_thickness", + "top_layers": "=0 if infill_sparse_density == 100 else math.ceil(round(top_thickness / resolveOrValue('layer_height'), 4))", + "bottom_layers": "=0 if infill_sparse_density == 100 else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))", + "wall_thickness": 0, + "wall_line_count": "=max(1, round((wall_thickness - wall_line_width_0) / wall_line_width_x) + 1) if wall_thickness != 0 else 0" + } + for property_key in specialized_settings: if mesh_type == "infill_mesh": if settings.getInstance(property_key) is None: definition = stack.getSettingDefinition(property_key) new_instance = SettingInstance(definition, settings) - # We just want the wall_line count to be there in case it was overriden in the global stack. - # as such, we don't need to set a value. - if property_key != "wall_line_count": - new_instance.setProperty("value", 0) + new_instance.setProperty("value", specialized_settings[property_key]) new_instance.resetState() # Ensure that the state is not seen as a user state. settings.addInstance(new_instance) settings_visibility_changed = True - elif old_mesh_type == "infill_mesh" and settings.getInstance(property_key) and (settings.getProperty(property_key, "value") == 0 or property_key == "wall_line_count"): + elif old_mesh_type == "infill_mesh" and settings.getInstance(property_key) and property_key in specialized_settings: settings.removeInstance(property_key) settings_visibility_changed = True diff --git a/plugins/PrepareStage/PrepareMenu.qml b/plugins/PrepareStage/PrepareMenu.qml index 73c2cad39a..061db0b8f6 100644 --- a/plugins/PrepareStage/PrepareMenu.qml +++ b/plugins/PrepareStage/PrepareMenu.qml @@ -1,7 +1,7 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2021 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.9 import QtQuick.Layouts 1.1 import QtQuick.Controls 2.3 @@ -13,6 +13,8 @@ Item { id: prepareMenu + property var fileProviderModel: CuraApplication.getFileProviderModel() + UM.I18nCatalog { id: catalog @@ -23,24 +25,22 @@ Item { left: parent.left right: parent.right - leftMargin: UM.Theme.getSize("wide_margin").width - rightMargin: UM.Theme.getSize("wide_margin").width + leftMargin: UM.Theme.getSize("wide_margin").width * 2 + rightMargin: UM.Theme.getSize("wide_margin").width * 2 } // Item to ensure that all of the buttons are nicely centered. Item { - anchors.horizontalCenter: parent.horizontalCenter - width: parent.width - 2 * UM.Theme.getSize("wide_margin").width - height: parent.height + anchors.fill: parent RowLayout { id: itemRow - anchors.left: openFileButton.right + anchors.left: parent.left anchors.right: parent.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.leftMargin: UM.Theme.getSize("default_margin").width + openFileButton.width + openFileMenu.width property int machineSelectorWidth: Math.round((width - printSetupSelectorItem.width) / 3) height: parent.height @@ -52,9 +52,6 @@ Item { id: machineSelection headerCornerSide: Cura.RoundedRectangle.Direction.Left - headerBackgroundBorder.width: UM.Theme.getSize("default_lining").width - headerBackgroundBorder.color: UM.Theme.getColor("lining") - enableHeaderShadow: false Layout.preferredWidth: parent.machineSelectorWidth Layout.fillWidth: true Layout.fillHeight: true @@ -63,9 +60,6 @@ Item Cura.ConfigurationMenu { id: printerSetup - enableHeaderShadow: false - headerBackgroundBorder.width: UM.Theme.getSize("default_lining").width - headerBackgroundBorder.color: UM.Theme.getColor("lining") Layout.fillHeight: true Layout.fillWidth: true Layout.preferredWidth: parent.machineSelectorWidth * 2 @@ -82,22 +76,129 @@ Item } } + //Pop-up shown when there are multiple items to select from. + Cura.ExpandablePopup + { + id: openFileMenu + visible: prepareMenu.fileProviderModel.count > 1 + + contentAlignment: Cura.ExpandablePopup.ContentAlignment.AlignLeft + headerCornerSide: Cura.RoundedRectangle.Direction.All + headerPadding: Math.round((parent.height - UM.Theme.getSize("button_icon").height) / 2) + contentPadding: UM.Theme.getSize("default_lining").width + enabled: visible + + height: parent.height + width: visible ? (headerPadding * 3 + UM.Theme.getSize("button_icon").height + iconSize) : 0 + + headerItem: UM.RecolorImage + { + id: menuIcon + source: UM.Theme.getIcon("Folder", "medium") + color: UM.Theme.getColor("icon") + + sourceSize.height: height + } + + contentItem: Item + { + id: popup + + Column + { + id: openProviderColumn + + //The column doesn't automatically listen to its children rect if the children change internally, so we need to explicitly update the size. + onChildrenRectChanged: + { + popup.height = childrenRect.height + popup.width = childrenRect.width + } + onPositioningComplete: + { + popup.height = childrenRect.height + popup.width = childrenRect.width + } + + Label + { + text: catalog.i18nc("@menu:header", "Open file") + color: UM.Theme.getColor("text_medium") + font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + + width: contentWidth + height: UM.Theme.getSize("action_button").height + leftPadding: UM.Theme.getSize("default_margin").width + } + + Repeater + { + model: prepareMenu.fileProviderModel + delegate: Button + { + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + width: contentItem.width + leftPadding + rightPadding + height: UM.Theme.getSize("action_button").height + hoverEnabled: true + + contentItem: Label + { + text: model.displayText + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + + width: contentWidth + height: parent.height + } + + onClicked: + { + if(model.index == 0) //The 0th element is the "From Disk" option, which should activate the open local file dialog. + { + Cura.Actions.open.trigger(); + } + else + { + prepareMenu.fileProviderModel.trigger(model.name); + } + } + + background: Rectangle + { + color: parent.hovered ? UM.Theme.getColor("action_button_hovered") : "transparent" + radius: UM.Theme.getSize("action_button_radius").width + width: popup.width + } + } + } + } + } + } + + //If there is just a single item, show a button instead that directly chooses the one option. Button { id: openFileButton - height: UM.Theme.getSize("stage_menu").height - width: UM.Theme.getSize("stage_menu").height + visible: prepareMenu.fileProviderModel.count <= 1 + + height: parent.height + width: visible ? height : 0 //Square button (and don't take up space if invisible). onClicked: Cura.Actions.open.trigger() + enabled: visible && prepareMenu.fileProviderModel.count > 0 hoverEnabled: true contentItem: Item { - anchors.fill: parent UM.RecolorImage { id: buttonIcon + source: UM.Theme.getIcon("Folder", "medium") anchors.centerIn: parent - source: UM.Theme.getIcon("Folder") width: UM.Theme.getSize("button_icon").width height: UM.Theme.getSize("button_icon").height color: UM.Theme.getColor("icon") @@ -109,8 +210,8 @@ Item background: Rectangle { id: background - height: UM.Theme.getSize("stage_menu").height - width: UM.Theme.getSize("stage_menu").height + height: parent.height + width: parent.width border.color: UM.Theme.getColor("lining") border.width: UM.Theme.getSize("default_lining").width diff --git a/plugins/PreviewStage/PreviewMenu.qml b/plugins/PreviewStage/PreviewMenu.qml index ff1ccff75f..9e039896c6 100644 --- a/plugins/PreviewStage/PreviewMenu.qml +++ b/plugins/PreviewStage/PreviewMenu.qml @@ -24,54 +24,36 @@ Item { left: parent.left right: parent.right - leftMargin: UM.Theme.getSize("wide_margin").width - rightMargin: UM.Theme.getSize("wide_margin").width + leftMargin: UM.Theme.getSize("wide_margin").width * 2 + rightMargin: UM.Theme.getSize("wide_margin").width * 2 } Row { id: stageMenuRow - anchors.horizontalCenter: parent.horizontalCenter - width: parent.width - 2 * UM.Theme.getSize("wide_margin").width - height: parent.height + anchors.fill: parent + // This is a trick to make sure that the borders of the two adjacent buttons' borders overlap. Otherwise + // there will be double border (one from each button) + spacing: -UM.Theme.getSize("default_lining").width Cura.ViewsSelector { id: viewsSelector height: parent.height - width: UM.Theme.getSize("views_selector").width + width: Math.max(Math.round((parent.width - printSetupSelectorItem.width) / 3), UM.Theme.getSize("views_selector").width) headerCornerSide: Cura.RoundedRectangle.Direction.Left } - // Separator line - Rectangle - { - height: parent.height - // If there is no viewPanel, we only need a single spacer, so hide this one. - visible: viewPanel.source != "" - width: visible ? UM.Theme.getSize("default_lining").width : 0 - - color: UM.Theme.getColor("lining") - } - // This component will grow freely up to complete the width of the row. Loader { id: viewPanel height: parent.height - width: source != "" ? (previewMenu.width - viewsSelector.width - printSetupSelectorItem.width - 2 * (UM.Theme.getSize("wide_margin").width + UM.Theme.getSize("default_lining").width)) : 0 + width: source != "" ? (parent.width - viewsSelector.width - printSetupSelectorItem.width) : 0 source: UM.Controller.activeView != null && UM.Controller.activeView.stageMenuComponent != null ? UM.Controller.activeView.stageMenuComponent : "" } - // Separator line - Rectangle - { - height: parent.height - width: UM.Theme.getSize("default_lining").width - color: UM.Theme.getColor("lining") - } - Item { id: printSetupSelectorItem diff --git a/plugins/SimulationView/SimulationViewMenuComponent.qml b/plugins/SimulationView/SimulationViewMenuComponent.qml index 86e686e0fc..6dde44c8ae 100644 --- a/plugins/SimulationView/SimulationViewMenuComponent.qml +++ b/plugins/SimulationView/SimulationViewMenuComponent.qml @@ -203,16 +203,16 @@ Cura.ExpandableComponent style: UM.Theme.styles.checkbox - - UM.RecolorImage + Rectangle { id: swatch anchors.verticalCenter: parent.verticalCenter anchors.right: extrudersModelCheckBox.right width: UM.Theme.getSize("layerview_legend_size").width height: UM.Theme.getSize("layerview_legend_size").height - source: UM.Theme.getIcon("Extruder", "medium") color: model.color + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") } Label diff --git a/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml index 2e3d17ceb0..8dca61ec38 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml @@ -1,23 +1,26 @@ -// Copyright (c) 2019 Ultimaker B.V. +// Copyright (c) 2021 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.3 -import QtQuick.Controls 1.4 +import QtQuick.Controls 2.4 import QtQuick.Controls.Styles 1.3 import UM 1.3 as UM import Cura 1.0 as Cura -Rectangle +Button { - id: base + property var iconSource: null + width: UM.Theme.getSize("button").width * 0.75 //Matching the size of the content of tool buttons. + height: UM.Theme.getSize("button").height * 0.75 - property var enabled: true + hoverEnabled: true - property var iconSource: null - color: enabled ? UM.Theme.getColor("monitor_icon_primary") : UM.Theme.getColor("monitor_icon_disabled") - height: width - radius: Math.round(0.5 * width) - width: 24 * screenScaleFactor + background: Rectangle + { + anchors.fill: parent + radius: 0.5 * width + color: parent.enabled ? (parent.hovered ? UM.Theme.getColor("monitor_secondary_button_hover") : "transparent") : UM.Theme.getColor("monitor_icon_disabled") + } UM.RecolorImage { @@ -27,30 +30,21 @@ Rectangle horizontalCenter: parent.horizontalCenter verticalCenter: parent.verticalCenter } - color: UM.Theme.getColor("monitor_icon_accent") + color: UM.Theme.getColor("primary") height: width source: iconSource width: Math.round(parent.width / 2) } - MouseArea + onClicked: { - id: clickArea - anchors.fill: parent - hoverEnabled: base.enabled - onClicked: + if (OutputDevice.activeCameraUrl != "") + { + OutputDevice.setActiveCameraUrl("") + } + else { - if (base.enabled) - { - if (OutputDevice.activeCameraUrl != "") - { - OutputDevice.setActiveCameraUrl("") - } - else - { - OutputDevice.setActiveCameraUrl(modelData.cameraUrl) - } - } + OutputDevice.setActiveCameraUrl(modelData.cameraUrl) } } } diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml index f3002fd25b..0f4aec5424 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml @@ -50,7 +50,7 @@ Item id: buildplateIcon anchors.centerIn: parent color: UM.Theme.getColor("monitor_icon_primary") - height: parent.height + height: UM.Theme.getSize("medium_button_icon").width source: "../svg/icons/Buildplate.svg" width: height visible: buildplate diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml index ac5f588db3..2720e6896a 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml @@ -5,6 +5,8 @@ import QtQuick 2.2 import QtQuick.Controls 2.0 import UM 1.3 as UM +import Cura 1.6 as Cura + /** * This component comprises a colored extruder icon, the material name, and the * print core name. It is used by the MonitorPrinterConfiguration component with @@ -18,10 +20,10 @@ import UM 1.3 as UM Item { // The material color - property alias color: extruderIcon.color + property alias color: extruderIcon.materialColor - // The extruder position; NOTE: Decent human beings count from 0 - property alias position: extruderIcon.position + // The extruder position + property int position // The material name property alias material: materialLabel.text @@ -32,12 +34,13 @@ Item // Height is 2 x 18px labels, plus 4px spacing between them height: 40 * screenScaleFactor // TODO: Theme! width: childrenRect.width + opacity: material != "" && material != "Empty" && position >= 0 ? 1 : 0.4 - MonitorIconExtruder + Cura.ExtruderIcon { id: extruderIcon - color: UM.Theme.getColor("monitor_skeleton_loading") - position: 0 + materialColor: UM.Theme.getColor("monitor_skeleton_loading") + anchors.verticalCenter: parent.verticalCenter } Rectangle @@ -46,16 +49,18 @@ Item anchors { left: extruderIcon.right - leftMargin: 12 * screenScaleFactor // TODO: Theme! + leftMargin: UM.Theme.getSize("default_margin").width + verticalCenter: extruderIcon.verticalCenter } color: materialLabel.visible > 0 ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading") - height: 18 * screenScaleFactor // TODO: Theme! + height: childrenRect.height width: Math.max(materialLabel.contentWidth, 60 * screenScaleFactor) // TODO: Theme! radius: 2 * screenScaleFactor // TODO: Theme! Label { id: materialLabel + anchors.top: parent.top color: UM.Theme.getColor("text") elide: Text.ElideRight @@ -63,29 +68,13 @@ Item text: "" visible: text !== "" - // FIXED-LINE-HEIGHT: - height: parent.height - verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering } - } - - Rectangle - { - id: printCoreLabelWrapper - anchors - { - left: materialLabelWrapper.left - bottom: parent.bottom - } - color: printCoreLabel.visible > 0 ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading") - height: 18 * screenScaleFactor // TODO: Theme! - width: Math.max(printCoreLabel.contentWidth, 36 * screenScaleFactor) // TODO: Theme! - radius: 2 * screenScaleFactor // TODO: Theme! Label { id: printCoreLabel + anchors.top: materialLabel.bottom color: UM.Theme.getColor("text") elide: Text.ElideRight @@ -93,9 +82,6 @@ Item text: "" visible: text !== "" - // FIXED-LINE-HEIGHT: - height: parent.height - verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering } } diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml index 79bc0ec25b..ad0e8a6777 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml @@ -38,6 +38,7 @@ Item Label { id: positionLabel + anchors.centerIn: icon font: UM.Theme.getFont("small") color: UM.Theme.getColor("text") height: Math.round(size / 2) @@ -45,8 +46,6 @@ Item text: position + 1 verticalAlignment: Text.AlignVCenter width: Math.round(size / 2) - x: Math.round(size * 0.25) - y: Math.round(size * 0.15625) visible: position >= 0 renderType: Text.NativeRendering } diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py index 1884efec46..9eaa133ef5 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py @@ -256,7 +256,16 @@ class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice): """ self._uploaded_print_job = self._pre_upload_print_job self._progress.hide() - PrintJobUploadSuccessMessage().show() + message = PrintJobUploadSuccessMessage() + message.addAction("monitor print", + name=I18N_CATALOG.i18nc("@action:button", "Monitor print"), + icon="", + description=I18N_CATALOG.i18nc("@action:tooltip", "Track the print in Ultimaker Digital Factory"), + button_align=message.ActionButtonAlignment.ALIGN_RIGHT) + df_url = f"https://digitalfactory.ultimaker.com/app/jobs/{self._cluster.cluster_id}?utm_source=cura&utm_medium=software&utm_campaign=monitor-button" + message.pyQtActionTriggered.connect(lambda message, action: (QDesktopServices.openUrl(QUrl(df_url)), message.hide())) + + message.show() self.writeFinished.emit() def _onPrintUploadSpecificError(self, reply: "QNetworkReply", _: "QNetworkReply.NetworkError"): diff --git a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py index aa64f338dd..aa3d72ccd8 100644 --- a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py +++ b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py @@ -13,6 +13,5 @@ class PrintJobUploadSuccessMessage(Message): def __init__(self) -> None: super().__init__( text = I18N_CATALOG.i18nc("@info:status", "Print job was successfully sent to the printer."), - title = I18N_CATALOG.i18nc("@info:title", "Data Sent"), - lifetime = 5 + title = I18N_CATALOG.i18nc("@info:title", "Data Sent") ) diff --git a/resources/definitions/atom2.def.json b/resources/definitions/atom2.def.json new file mode 100644 index 0000000000..d7a26546d8 --- /dev/null +++ b/resources/definitions/atom2.def.json @@ -0,0 +1,35 @@ +{ + "name": "Atom 2", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Victor (Yu Chieh) Lin", + "manufacturer": "Layer One", + "file_formats": "text/x-gcode", + "platform_offset": [0,0,0], + "machine_extruder_trains": { "0": "atom2_extruder_0" + } + }, + + "overrides": { + "machine_name": { "default_value": "Atom 2" }, + "machine_shape": { "default_value": "elliptic" }, + "machine_width": { "default_value": 210 }, + "machine_depth": { "default_value": 210 }, + "machine_height": { "default_value": 320 }, + "machine_extruder_count": { "default_value": 1 }, + "machine_heated_bed": { "default_value": false }, + "machine_center_is_zero": { "default_value": true }, + + "machine_start_gcode": { "default_value": "G21\nG90 \nM107\nG28\nG92 E0\nG1 F200 E3\nG92 E0" }, + "machine_end_gcode": { "default_value": "M104 S0\nG28\nG91\nG1 E-6 F300\nM84\nG90" }, + + "layer_height": { "default_value": 0.2 }, + "default_material_print_temperature": { "default_value": 210 }, + "speed_print": { "default_value": 32 }, + "optimize_wall_printing_order": { "value": "True" }, + "infill_sparse_density": { "default_value": 10 }, + "brim_width": { "default_value": 4 } + } +} diff --git a/resources/definitions/creasee_cs20.def.json b/resources/definitions/creasee_cs20.def.json new file mode 100644 index 0000000000..ab30f3dd1c --- /dev/null +++ b/resources/definitions/creasee_cs20.def.json @@ -0,0 +1,32 @@ +{ + "version": 2, + "name": "Creasee CS20", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "manufacturer": "Creasee", + "machine_extruder_trains": + { + "0": "creasee_extruder_0" + } + }, + + "overrides": { + "machine_name": { "default_value": "Creasee CS20" }, + "machine_width": { + "default_value": 220 + }, + "machine_depth": { + "default_value": 220 + }, + "machine_height": { + "default_value": 250 + }, + "machine_start_gcode": { + "default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform" + }, + "machine_end_gcode": { + "default_value": "M104 S0\nM140 S0\nG92 E0\nG1 E-10 F2000\nG28 X0 Y0\nM84" + } + } +} diff --git a/resources/definitions/creasee_cs30.def.json b/resources/definitions/creasee_cs30.def.json new file mode 100644 index 0000000000..7d6a5090bb --- /dev/null +++ b/resources/definitions/creasee_cs30.def.json @@ -0,0 +1,32 @@ +{ + "version": 2, + "name": "Creasee CS30", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "manufacturer": "Creasee", + "machine_extruder_trains": + { + "0": "creasee_extruder_1" + } + }, + + "overrides": { + "machine_name": { "default_value": "Creasee CS30" }, + "machine_width": { + "default_value": 300 + }, + "machine_depth": { + "default_value": 300 + }, + "machine_height": { + "default_value": 400 + }, + "machine_start_gcode": { + "default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform" + }, + "machine_end_gcode": { + "default_value": "M104 S0\nM140 S0\nG92 E0\nG1 E-10 F2000\nG28 X0 Y0\nM84" + } + } +} diff --git a/resources/definitions/dagoma_disco.def.json b/resources/definitions/dagoma_disco.def.json index bf098b8b4a..89773d9c0e 100644 --- a/resources/definitions/dagoma_disco.def.json +++ b/resources/definitions/dagoma_disco.def.json @@ -73,6 +73,7 @@ "machine_steps_per_mm_x": { "default_value": 80 }, "machine_steps_per_mm_y": { "default_value": 80 }, "machine_steps_per_mm_z": { "default_value": 2560 }, - "machine_steps_per_mm_e": { "default_value": 98 } + "machine_steps_per_mm_e": { "default_value": 98 }, + "speed_z_hop": {"default_value": 4} } } diff --git a/resources/definitions/geeetech_a30.def.json b/resources/definitions/geeetech_a30.def.json index 1f08d37445..d4f7df139f 100644 --- a/resources/definitions/geeetech_a30.def.json +++ b/resources/definitions/geeetech_a30.def.json @@ -4,7 +4,7 @@ "inherits": "fdmprinter", "metadata": { "author": "William & Cataldo URSO", - "manufacturer": "Shenzhen Geeetech Technology", + "manufacturer": "Geeetech", "file_formats": "text/x-gcode", "visible": true, "has_materials": true, diff --git a/resources/definitions/maker_made_300x.def.json b/resources/definitions/maker_made_300x.def.json index fa584c9cfe..a4b49820b7 100644 --- a/resources/definitions/maker_made_300x.def.json +++ b/resources/definitions/maker_made_300x.def.json @@ -92,7 +92,6 @@ "speed_travel": {"value": 150},
"speed_layer_0": {"value": 10},
"speed_travel_layer_0": {"value": 50},
- "machine_max_feedrate_z": {"value": 0},
"speed_slowdown_layers": {"value": 2},
"speed_equalize_flow_enabled": {"value": false },
"acceleration_enabled": {"value": false },
diff --git a/resources/definitions/malyan_m200.def.json b/resources/definitions/malyan_m200.def.json index c853f8f772..e9980724cb 100644 --- a/resources/definitions/malyan_m200.def.json +++ b/resources/definitions/malyan_m200.def.json @@ -80,6 +80,7 @@ "retraction_amount" : { "default_value": 4.5}, "retraction_speed" : { "default_value": 40}, "coasting_enable": { "default_value": true }, - "prime_tower_enable": { "default_value": false} + "prime_tower_enable": { "default_value": false}, + "speed_z_hop": {"default_value": 1.5} } } diff --git a/resources/definitions/pbr3d_g1.def.json b/resources/definitions/pbr3d_g1.def.json new file mode 100644 index 0000000000..fbe1d5bfc6 --- /dev/null +++ b/resources/definitions/pbr3d_g1.def.json @@ -0,0 +1,45 @@ +{ + "version": 2, + "name": "PBR 3D Gen-I", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Kapil H. Sonone, Prof. Bahubali P. Fuladi", + "manufacturer": "PBR Research", + "file_formats": "text/x-gcode", + "platform": "pbr3d_g1_buildplate.stl", + "platform_offset": [0, -5, 0], + "machine_extruder_trains": + { + "0": "pbr3d_g1_extruder_0" + } + }, + + "overrides": { + "machine_name": { "default_value": "PBR 3D Gen-I" }, + "machine_heated_bed": { + "default_value": true + }, + "machine_width": { + "default_value": 200 + }, + "machine_height": { + "default_value": 200 + }, + "machine_depth": { + "default_value": 200 + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "value": "200" + }, + "machine_start_gcode": { + "default_value": "G28 ;Home\nG1 Z15.0 F6000 ;Move the Platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0" + }, + "machine_end_gcode": { + "default_value": "M104 S0\nM140 S0\n;Retract the Filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84" + } + } +} diff --git a/resources/definitions/printrbot_play.def.json b/resources/definitions/printrbot_play.def.json index e3c0c85d80..b1f7e72967 100644 --- a/resources/definitions/printrbot_play.def.json +++ b/resources/definitions/printrbot_play.def.json @@ -45,6 +45,7 @@ }, "machine_end_gcode": { "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" - } + }, + "speed_z_hop": {"default_value": 5} } } diff --git a/resources/definitions/rigid3d_base.def.json b/resources/definitions/rigid3d_base.def.json index 8e86f6bd7d..bd1995f3dc 100644 --- a/resources/definitions/rigid3d_base.def.json +++ b/resources/definitions/rigid3d_base.def.json @@ -143,7 +143,8 @@ "adaptive_layer_height_variation_step": { "value": 0.04 }, "top_bottom_thickness": {"value": "layer_height_0 + layer_height * 3" }, - "wall_thickness": {"value": "line_width * 2" } + "wall_thickness": {"value": "line_width * 2" }, + "speed_z_hop": {"default_value": 8} } }
\ No newline at end of file diff --git a/resources/definitions/strateo3d.def.json b/resources/definitions/strateo3d.def.json index 2858a859c5..9c865fe233 100644 --- a/resources/definitions/strateo3d.def.json +++ b/resources/definitions/strateo3d.def.json @@ -15,14 +15,14 @@ "preferred_material": "emotiontech_pla", "preferred_quality_type": "c", "variants_name": "Print Head", - "machine_extruder_trains": - { - "0": "strateo3d_right_extruder", + "machine_extruder_trains": + { + "0": "strateo3d_right_extruder", "1": "strateo3d_left_extruder" } }, - - "overrides": + + "overrides": { "machine_name": { "default_value": "Strateo3D" }, "machine_width": { "default_value": 600 }, @@ -35,28 +35,43 @@ "gantry_height": { "value": "40" }, "machine_extruder_count": { "default_value": 2 }, "machine_gcode_flavor": { "default_value": "Marlin" }, - "machine_start_gcode": { "default_value": "G28 \nG90 G1 X300 Y210 Z15 F6000 \nG92 E0" }, + "machine_start_gcode": { "default_value": ";M104 T0 S{material_standby_temperature, 0} \n;M104 T1 S{material_standby_temperature, 1} \n;M140 S{material_bed_temperature_layer_0} \n;M141 S{build_volume_temperature} \nG28 \nG90 \nT{initial_extruder_nr} \nG1 X0 Y0 Z15 F6000 \n;M190 S{material_bed_temperature_layer_0} \n;M109 S{material_print_temperature_layer_0, initial_extruder_nr} \nG1 Z0.3 \nG92 E0 \nG1 F300 X45 E18 \n;G1 F1500 E17 \nG1 F600 X25 \nG1 F600 Z3" }, "machine_end_gcode": { "default_value": "T1 \nM104 S0 \nT0 \nM104 S0 \nM140 S0 \nM141 S0 \nG91 \nG0 z1 \nG90 \nG28 \nM801.0 \nM84 \nM192" }, "extruder_prime_pos_y": {"minimum_value": "0", "maximum_value": "machine_depth"}, "extruder_prime_pos_x": {"minimum_value": "0", "maximum_value": "machine_width"}, "machine_heat_zone_length": { "default_value": 7 }, - "default_material_print_temperature": { "maximum_value_warning": "350" }, - "material_print_temperature": { "maximum_value_warning": "350" }, - "material_print_temperature_layer_0": { "maximum_value_warning": "350" }, - "material_bed_temperature": { "maximum_value": "130" }, - "material_bed_temperature_layer_0": { "maximum_value": "130" }, + "default_material_print_temperature": { "maximum_value_warning": "400", "maximum_value": "415" }, + "material_print_temperature": { "maximum_value_warning": "400", "maximum_value": "415" }, + "material_print_temperature_layer_0": { "maximum_value_warning": "400", "maximum_value": "415" }, + "material_initial_print_temperature": { "maximum_value_warning": "400", "maximum_value": "415" }, + "material_final_print_temperature": { "maximum_value_warning": "400", "maximum_value": "415" }, + "material_standby_temperature": { "maximum_value_warning": "material_print_temperature - 40", "maximum_value": "material_print_temperature" }, + "material_bed_temperature": { "maximum_value_warning": "140", "maximum_value": "140" }, + "material_bed_temperature_layer_0": { "maximum_value_warning": "140", "maximum_value": "140" }, "extruder_prime_pos_abs": { "default_value": true }, "machine_acceleration": { "default_value": 1500 }, + "machine_max_jerk_xy": { "default_value": 0.01 }, + "machine_max_jerk_z": { "default_value": 0}, "acceleration_enabled": { "value": false }, - "acceleration_print": { "value": "machine_acceleration" }, - "acceleration_wall": { "value": "math.ceil(acceleration_print * 1250 / acceleration_print)" }, - "acceleration_wall_0": { "value": "math.ceil(acceleration_print * 1000 / acceleration_print)" }, - "acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1250 / acceleration_print)" }, - "acceleration_support": { "value": "acceleration_print" }, - "acceleration_support_interface": { "value": "acceleration_topbottom" }, - "acceleration_travel": { "value": "acceleration_print" }, - "acceleration_layer_0": { "value": "acceleration_topbottom" }, + "acceleration_print": { "value": "machine_acceleration", "maximum_value_warning": "1500" }, + "acceleration_infill": { "maximum_value_warning": "1500" }, + "acceleration_wall": { "value": "math.ceil(acceleration_print * 1250 / acceleration_print)", "maximum_value_warning": "1500" }, + "acceleration_wall_0": { "value": "math.ceil(acceleration_print * 1000 / acceleration_print)", "maximum_value_warning": "1500" }, + "acceleration_wall_x": { "maximum_value_warning": "1500" }, + "acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1250 / acceleration_print)", "maximum_value_warning": "1500" }, + "acceleration_support": { "value": "acceleration_print", "maximum_value_warning": "1500" }, + "acceleration_support_infill": { "maximum_value_warning": "1500" }, + "acceleration_support_interface": { "value": "acceleration_topbottom", "maximum_value_warning": "1500" }, + "acceleration_support_roof": { "maximum_value_warning": "1500" }, + "acceleration_support_bottom": { "maximum_value_warning": "1500" }, + "acceleration_prime_tower": { "maximum_value_warning": "1500" }, + "acceleration_travel": { "value": "acceleration_print", "maximum_value_warning": "1500" }, + "acceleration_layer_0": { "value": "acceleration_topbottom", "maximum_value_warning": "1500" }, + "acceleration_print_layer_0": { "maximum_value_warning": "1500" }, + "acceleration_travel_layer_0": { "maximum_value_warning": "1500" }, + "acceleration_skirt_brim": { "maximum_value_warning": "1500" }, + "adaptive_layer_height_variation": { "default_value": 0.1 }, "adaptive_layer_height_variation_step": { "default_value": 0.05 }, "adhesion_type": { "default_value": "skirt" }, @@ -66,30 +81,39 @@ "infill_before_walls": { "default_value": false }, "infill_overlap": { "value": "0" }, "infill_wipe_dist": { "value": "0" }, - "jerk_enabled": { "value": "False" }, - "jerk_layer_0": { "value": "jerk_topbottom" }, - "jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" }, - "jerk_print": { "value": "25" }, - "jerk_support": { "value": "math.ceil(jerk_print * 15 / 25)" }, - "jerk_support_interface": { "value": "jerk_topbottom" }, - "jerk_topbottom": { "value": "math.ceil(jerk_print * 5 / 25)" }, - "jerk_wall": { "value": "math.ceil(jerk_print * 10 / 25)" }, - "jerk_wall_0": { "value": "math.ceil(jerk_wall * 5 / 10)" }, + + "jerk_enabled": { "value": "False", "maximum_value_warning": "0.01" }, + "jerk_print": { "value": "0.01", "maximum_value_warning": "0.01" }, + "jerk_infill": { "value": "0.01", "maximum_value_warning": "0.01" }, + "jerk_layer_0": { "value": "jerk_topbottom", "maximum_value_warning": "0.01" }, + "jerk_print_layer_0": { "maximum_value_warning": "0.01" }, + "jerk_travel_layer_0": { "maximum_value_warning": "0.01" }, + "jerk_skirt_brim": { "maximum_value_warning": "0.01" }, + "jerk_prime_tower": { "value": "jerk_print * 15 / 25", "maximum_value_warning": "0.01" }, + "jerk_support": { "value": "jerk_print * 15 / 25", "maximum_value_warning": "0.01" }, + "jerk_support_infill": { "maximum_value_warning": "0.01" }, + "jerk_support_interface": { "value": "jerk_topbottom", "maximum_value_warning": "0.01" }, + "jerk_support_roof": { "maximum_value_warning": "0.01" }, + "jerk_support_bottom": { "maximum_value_warning": "0.01" }, + "jerk_topbottom": { "value": "jerk_print * 5 / 25", "maximum_value_warning": "0.01" }, + "jerk_wall": { "value": "jerk_print * 5 / 25", "maximum_value_warning": "0.01" }, + "jerk_wall_0": { "value": "jerk_wall * 5 / 10", "maximum_value_warning": "0.01" }, + "jerk_wall_x": { "maximum_value_warning": "0.01" }, + "jerk_travel": { "value": "machine_max_jerk_xy", "maximum_value_warning": "0.01" }, + "layer_start_x": { "value": "sum(extruderValues('machine_extruder_start_pos_x')) / len(extruderValues('machine_extruder_start_pos_x'))" }, "layer_start_y": { "value": "sum(extruderValues('machine_extruder_start_pos_y')) / len(extruderValues('machine_extruder_start_pos_y'))" }, "machine_min_cool_heat_time_window": { "value": "15" }, "machine_nozzle_cool_down_speed": { "default_value": 0.50 }, "machine_nozzle_heat_up_speed": { "default_value": 2.25 }, - "material_final_print_temperature": { "value": "material_print_temperature - 10" }, "material_flow": { "default_value": 93 }, "material_flow_layer_0": { "value": "math.ceil(material_flow*1)" }, - "material_initial_print_temperature": { "value": "material_print_temperature - 5" }, "meshfix_maximum_resolution": { "value": "0.5" }, "meshfix_maximum_deviation": { "default_value": 0.04 }, "optimize_wall_printing_order": { "value": "True" }, "prime_blob_enable": { "enabled": false, "default_value": false }, "prime_tower_min_volume": { "default_value": 35 }, - "prime_tower_position_x": { "value": "machine_width/2 - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1" }, + "prime_tower_position_x": { "value": "machine_width/2 + prime_tower_size/2" }, "prime_tower_position_y": { "value": "machine_depth - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1" }, "retraction_amount": { "default_value": 1.5 }, "retraction_combing": { "default_value": "all" }, @@ -135,4 +159,4 @@ "travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" }, "wall_thickness": { "value": "wall_line_width_0 + wall_line_width_x" } } -}
\ No newline at end of file +} diff --git a/resources/definitions/tevo_tarantula.def.json b/resources/definitions/tevo_tarantula.def.json index eee773cd74..8efa9c4f87 100644 --- a/resources/definitions/tevo_tarantula.def.json +++ b/resources/definitions/tevo_tarantula.def.json @@ -47,6 +47,7 @@ "machine_max_acceleration_y": { "default_value": 2650 }, "acceleration_print": { "default_value": 2650 }, "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E3 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." }, - "machine_end_gcode": { "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG90 ;absolute positioning\nG1 X0 Y200 F3600 ;move extruder out of the way by moving the baseplate to the front for easier access to printed object\nM84 ;steppers off" } + "machine_end_gcode": { "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG90 ;absolute positioning\nG1 X0 Y200 F3600 ;move extruder out of the way by moving the baseplate to the front for easier access to printed object\nM84 ;steppers off" }, + "speed_z_hop": {"default_value": 3} } } diff --git a/resources/definitions/voron0_120.def.json b/resources/definitions/voron0_120.def.json index 7a06c2eac7..d0bf92f0e0 100644 --- a/resources/definitions/voron0_120.def.json +++ b/resources/definitions/voron0_120.def.json @@ -1,5 +1,5 @@ { - "name": "Voron V0", + "name": "Voron 0", "version": 2, "inherits": "voron2_base", "metadata": @@ -10,7 +10,7 @@ }, "overrides": { - "machine_name": { "default_value": "VORON V0" }, + "machine_name": { "default_value": "VORON 0" }, "machine_width": { "default_value": 120 }, "machine_depth": { "default_value": 120 }, "machine_height": { "default_value": 120 } diff --git a/resources/extruders/atom2_extruder_0.def.json b/resources/extruders/atom2_extruder_0.def.json new file mode 100644 index 0000000000..be9d5782ff --- /dev/null +++ b/resources/extruders/atom2_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "atom2", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/creasee_extruder_0.def.json b/resources/extruders/creasee_extruder_0.def.json new file mode 100644 index 0000000000..abefa6b1c8 --- /dev/null +++ b/resources/extruders/creasee_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "creasee_cs20", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/creasee_extruder_1.def.json b/resources/extruders/creasee_extruder_1.def.json new file mode 100644 index 0000000000..747e1c48f8 --- /dev/null +++ b/resources/extruders/creasee_extruder_1.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "creasee_cs30", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/pbr3d_g1_extruder_0.def.json b/resources/extruders/pbr3d_g1_extruder_0.def.json new file mode 100644 index 0000000000..3a79fe4f20 --- /dev/null +++ b/resources/extruders/pbr3d_g1_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "pbr3d_g1", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/i18n/de_DE/fdmprinter.def.json.po b/resources/i18n/de_DE/fdmprinter.def.json.po index 5d7915ac0d..3eb590b680 100644 --- a/resources/i18n/de_DE/fdmprinter.def.json.po +++ b/resources/i18n/de_DE/fdmprinter.def.json.po @@ -1177,7 +1177,7 @@ msgstr "Hinten links" #: fdmprinter.def.json msgctxt "z_seam_position option back" msgid "Back" -msgstr "Zurück" +msgstr "Hinten" #: fdmprinter.def.json msgctxt "z_seam_position option backright" diff --git a/resources/meshes/pbr3d_g1_buildplate.stl b/resources/meshes/pbr3d_g1_buildplate.stl Binary files differnew file mode 100644 index 0000000000..1f7b77bd78 --- /dev/null +++ b/resources/meshes/pbr3d_g1_buildplate.stl diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml index 48c05f8a11..ef1622daee 100644 --- a/resources/qml/Account/AccountWidget.qml +++ b/resources/qml/Account/AccountWidget.qml @@ -54,9 +54,10 @@ Item id: accountWidget anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: signInButton.horizontalCenter - implicitHeight: UM.Theme.getSize("main_window_header").height - implicitWidth: UM.Theme.getSize("main_window_header").height + implicitHeight: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) + implicitWidth: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) hoverEnabled: true @@ -68,8 +69,8 @@ Item { id: avatar - width: Math.round(0.8 * accountWidget.width) - height: Math.round(0.8 * accountWidget.height) + width: accountWidget.width + height: accountWidget.height anchors.verticalCenter: accountWidget.verticalCenter anchors.horizontalCenter: accountWidget.horizontalCenter @@ -86,7 +87,7 @@ Item { id: initialCircle anchors.centerIn: parent - width: Math.min(parent.width, parent.height) + width: Math.min(accountWidget.width, accountWidget.height) height: width radius: width color: accountWidget.hovered ? UM.Theme.getColor("primary_text") : "transparent" @@ -141,7 +142,7 @@ Item borderColor: UM.Theme.getColor("lining") borderWidth: UM.Theme.getSize("default_lining").width - target: Qt.point(width - (accountWidget.width / 2), -10) + target: Qt.point(width - (signInButton.width / 2), -10) arrowSize: UM.Theme.getSize("default_arrow").width } diff --git a/resources/qml/Account/UserOperations.qml b/resources/qml/Account/UserOperations.qml index 19e92e0249..f5241596d5 100644 --- a/resources/qml/Account/UserOperations.qml +++ b/resources/qml/Account/UserOperations.qml @@ -9,7 +9,7 @@ import Cura 1.1 as Cura Column { - spacing: UM.Theme.getSize("narrow_margin").height + spacing: UM.Theme.getSize("default_margin").height topPadding: UM.Theme.getSize("default_margin").height bottomPadding: UM.Theme.getSize("default_margin").height width: childrenRect.width @@ -18,7 +18,7 @@ Column { id: accountInfo width: childrenRect.width - height: childrenRect.height + height: accountSyncDetailsColumn.height anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width AvatarImage @@ -56,6 +56,7 @@ Column Column { + id: accountSyncDetailsColumn anchors.left: avatar.right anchors.leftMargin: UM.Theme.getSize("default_margin").width spacing: UM.Theme.getSize("narrow_margin").height diff --git a/resources/qml/ActionButton.qml b/resources/qml/ActionButton.qml index 0c1be007b5..31d5c35d2c 100644 --- a/resources/qml/ActionButton.qml +++ b/resources/qml/ActionButton.qml @@ -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 QtQuick 2.7 @@ -18,19 +18,16 @@ Button property alias textFont: buttonText.font property alias cornerRadius: backgroundRect.radius property alias tooltip: tooltip.tooltipText - property alias cornerSide: backgroundRect.cornerSide property color color: UM.Theme.getColor("primary") property color hoverColor: UM.Theme.getColor("primary_hover") property color disabledColor: color property color textColor: UM.Theme.getColor("button_text") property color textHoverColor: textColor - property color textDisabledColor: textColor + property color textDisabledColor: disabledColor property color outlineColor: color - property color outlineHoverColor: hoverColor - property color outlineDisabledColor: outlineColor - property alias shadowColor: shadow.color - property alias shadowEnabled: shadow.visible + property color outlineHoverColor: outlineColor + property color outlineDisabledColor: disabledColor property alias busy: busyIndicator.visible property bool underlineTextOnHover: false @@ -46,6 +43,49 @@ Button // but it can exceed a maximum, then this value have to be set. property int maximumWidth: 0 + // These properties are deprecated. + // To (maybe) prevent a major SDK upgrade, mark them as deprecated instead of just outright removing them. + // Note, if you still want rounded corners, use (something based on) Cura.RoundedRectangle. + property alias cornerSide: deprecatedProperties.cornerSide + property alias shadowColor: deprecatedProperties.shadowColor + property alias shadowEnabled: deprecatedProperties.shadowEnabled + + Item + { + id: deprecatedProperties + + visible: false + enabled: false + width: 0 + height: 0 + + property var cornerSide: null + property var shadowColor: null + property var shadowEnabled: null + + onCornerSideChanged: + { + if (cornerSide != null) + { + CuraApplication.writeToLog("w", "'ActionButton.cornerSide' is deprecated since 4.11. Rounded corners can still be made with 'Cura.RoundedRectangle'."); + } + } + onShadowColorChanged: + { + if (shadowColor != null) + { + CuraApplication.writeToLog("w", "'ActionButton.shadowColor' is deprecated since 4.11.") + } + } + onShadowEnabledChanged: + { + if (shadowEnabled != null) + { + CuraApplication.writeToLog("w", "'ActionButton.shadowEnabled' is deprecated since 4.11.") + } + } + } + leftPadding: UM.Theme.getSize("default_margin").width rightPadding: UM.Theme.getSize("default_margin").width height: UM.Theme.getSize("action_button").height @@ -130,24 +170,13 @@ Button background: Cura.RoundedRectangle { id: backgroundRect - cornerSide: Cura.RoundedRectangle.Direction.All color: button.enabled ? (button.hovered ? button.hoverColor : button.color) : button.disabledColor - radius: UM.Theme.getSize("action_button_radius").width border.width: UM.Theme.getSize("default_lining").width border.color: button.enabled ? (button.hovered ? button.outlineHoverColor : button.outlineColor) : button.outlineDisabledColor - } - DropShadow - { - id: shadow - // Don't blur the shadow + // Disable the rounded-ness of this rectangle. We can't use a normal Rectangle here yet, as the API/SDK has only just been deprecated. radius: 0 - anchors.fill: backgroundRect - source: backgroundRect - verticalOffset: 2 - visible: false - // Should always be drawn behind the background. - z: backgroundRect.z - 1 + cornerSide: Cura.RoundedRectangle.Direction.None } Cura.ToolTip @@ -189,4 +218,4 @@ Button duration: 2500 } } -}
\ No newline at end of file +} diff --git a/resources/qml/ActionPanel/OutputDevicesActionButton.qml b/resources/qml/ActionPanel/OutputDevicesActionButton.qml index 6d1a1d83dd..48416e69fd 100644 --- a/resources/qml/ActionPanel/OutputDevicesActionButton.qml +++ b/resources/qml/ActionPanel/OutputDevicesActionButton.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2021 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 @@ -23,7 +23,6 @@ Item id: saveToButton height: parent.height fixedWidthMode: true - cornerSide: deviceSelectionMenu.visible ? Cura.RoundedRectangle.Direction.Left : Cura.RoundedRectangle.Direction.All anchors { @@ -43,15 +42,11 @@ Item } } - Cura.ActionButton + Cura.PrimaryButton { id: deviceSelectionMenu height: parent.height - shadowEnabled: true - shadowColor: UM.Theme.getColor("primary_shadow") - cornerSide: Cura.RoundedRectangle.Direction.Right - anchors { top: parent.top @@ -61,7 +56,7 @@ Item leftPadding: UM.Theme.getSize("narrow_margin").width //Need more space than usual here for wide text. rightPadding: UM.Theme.getSize("narrow_margin").width iconSource: popup.opened ? UM.Theme.getIcon("ChevronSingleUp") : UM.Theme.getIcon("ChevronSingleDown") - color: UM.Theme.getColor("action_panel_secondary") + color: popup.opened ? hoverColor : UM.Theme.getColor("action_panel_secondary") visible: (devicesModel.deviceCount > 1) onClicked: popup.opened ? popup.close() : popup.open() @@ -70,6 +65,7 @@ Item { id: popup padding: 0 + spacing: 0 y: -height x: parent.width - width @@ -78,17 +74,16 @@ Item contentItem: ColumnLayout { + spacing: 0 + Repeater { model: devicesModel - delegate: Cura.ActionButton + delegate: Cura.PrimaryButton { text: model.description visible: model.id != UM.OutputDeviceManager.activeDevice // Don't show the active device in the list - color: "transparent" - cornerRadius: 0 - hoverColor: UM.Theme.getColor("primary") Layout.fillWidth: true // The total width of the popup should be defined by the largest button. By stating that each // button should be minimally the size of it's content (aka; implicitWidth) we can ensure that. @@ -102,13 +97,6 @@ Item } } } - - background: Rectangle - { - opacity: visible ? 1 : 0 - Behavior on opacity { NumberAnimation { duration: 100 } } - color: UM.Theme.getColor("action_panel_secondary") - } } } diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index db910d1798..191ae712d4 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -429,6 +429,14 @@ UM.MainWindow height: UM.Theme.getSize("message_action_button").height } } + link: Component + { + Cura.TertiaryButton + { + text: model.name + height: UM.Theme.getSize("message_action_button").height + } + } } } diff --git a/resources/qml/ExpandableComponent.qml b/resources/qml/ExpandableComponent.qml index f58d7b59ff..18eb8c0fa6 100644 --- a/resources/qml/ExpandableComponent.qml +++ b/resources/qml/ExpandableComponent.qml @@ -7,8 +7,6 @@ import QtQuick.Controls 2.3 import UM 1.2 as UM import Cura 1.0 as Cura -import QtGraphicalEffects 1.0 // For the dropshadow - // The expandable component has 2 major sub components: // * The headerItem; Always visible and should hold some info about what happens if the component is expanded // * The contentItem; The content that needs to be shown if the component is expanded. @@ -58,6 +56,9 @@ Item property alias headerBackgroundBorder: background.border + // Whether or not to show the background border + property bool enableHeaderBackgroundBorder: true + // What icon should be displayed on the right. property alias iconSource: collapseButton.source @@ -75,11 +76,7 @@ Item // On what side should the header corners be shown? 1 is down, 2 is left, 3 is up and 4 is right. property alias headerCornerSide: background.cornerSide - property alias headerShadowColor: shadow.color - - property alias enableHeaderShadow: shadow.visible - - property int shadowOffset: 2 + property int popupOffset: 2 // Prefix used for the dragged position preferences. Preferences not used if empty. Don't translate! property string dragPreferencesNamePrefix: "" @@ -122,6 +119,9 @@ Item id: background property real padding: UM.Theme.getSize("default_margin").width + border.width: base.enableHeaderBackgroundBorder ? UM.Theme.getSize("default_lining").width : 0 + border.color: UM.Theme.getColor("lining") + color: base.enabled ? (base.expanded ? headerActiveColor : headerBackgroundColor) : UM.Theme.getColor("disabled") anchors.fill: parent @@ -167,7 +167,7 @@ Item verticalCenter: parent.verticalCenter margins: background.padding } - source: UM.Theme.getIcon("Pen") + source: UM.Theme.getIcon("ChevronSingleDown") visible: source != "" width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height @@ -186,20 +186,6 @@ Item } } - DropShadow - { - id: shadow - // Don't blur the shadow - radius: 0 - anchors.fill: background - source: background - verticalOffset: base.shadowOffset - visible: true - color: UM.Theme.getColor("action_button_shadow") - // Should always be drawn behind the background. - z: background.z - 1 - } - Cura.RoundedRectangle { id: contentContainer @@ -211,7 +197,7 @@ Item height: childrenRect.height // Ensure that the content is located directly below the headerItem - y: dragPreferencesNamePrefix === "" ? (background.height + base.shadowOffset + base.contentSpacingY) : UM.Preferences.getValue(dragPreferencesNamePrefix + dragPreferencesNameY) + y: dragPreferencesNamePrefix === "" ? (background.height + base.popupOffset + base.contentSpacingY) : UM.Preferences.getValue(dragPreferencesNamePrefix + dragPreferencesNameY) // Make the content aligned with the rest, using the property contentAlignment to decide whether is right or left. // In case of right alignment, the 3x padding is due to left, right and padding between the button & text. @@ -230,7 +216,7 @@ Item var maxPt = base.mapFromItem(null, CuraApplication.appWidth() - (contentContainer.width + margin.width), CuraApplication.appHeight() - (contentContainer.height + margin.height)); - var initialY = background.height + base.shadowOffset + margin.height; + var initialY = background.height + base.popupOffset + margin.height; contentContainer.x = Math.max(minPt.x, Math.min(maxPt.x, posNewX)); contentContainer.y = Math.max(initialY, Math.min(maxPt.y, posNewY)); diff --git a/resources/qml/ExpandablePopup.qml b/resources/qml/ExpandablePopup.qml index 69f7f61433..3bcfdbb6f8 100644 --- a/resources/qml/ExpandablePopup.qml +++ b/resources/qml/ExpandablePopup.qml @@ -7,8 +7,6 @@ import QtQuick.Controls 2.3 import UM 1.2 as UM import Cura 1.0 as Cura -import QtGraphicalEffects 1.0 // For the dropshadow - // The expandable component has 2 major sub components: // * The headerItem; Always visible and should hold some info about what happens if the component is expanded // * The contentItem; The content that needs to be shown if the component is expanded. @@ -52,6 +50,9 @@ Item property alias headerBackgroundBorder: background.border + // Whether or not to show the background border + property bool enableHeaderBackgroundBorder: true + // What icon should be displayed on the right. property alias iconSource: collapseButton.source @@ -74,11 +75,7 @@ Item // Change the contentItem close behaviour property alias contentClosePolicy : content.closePolicy - property alias headerShadowColor: shadow.color - - property alias enableHeaderShadow: shadow.visible - - property int shadowOffset: 2 + property int popupOffset: 2 onEnabledChanged: { @@ -116,6 +113,9 @@ Item id: background property real padding: UM.Theme.getSize("default_margin").width + border.width: base.enableHeaderBackgroundBorder ? UM.Theme.getSize("default_lining").width : 0 + border.color: UM.Theme.getColor("lining") + color: base.enabled ? headerBackgroundColor : UM.Theme.getColor("disabled") anchors.fill: parent @@ -180,7 +180,7 @@ Item verticalCenter: parent.verticalCenter margins: background.padding } - source: expanded ? UM.Theme.getIcon("ChevronSingleDown") : UM.Theme.getIcon("ChevronSingleLeft") + source: UM.Theme.getIcon("ChevronSingleDown") visible: source != "" width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height @@ -190,26 +190,12 @@ Item } - DropShadow - { - id: shadow - // Don't blur the shadow - radius: 0 - anchors.fill: background - source: background - verticalOffset: base.shadowOffset - visible: true - color: UM.Theme.getColor("action_button_shadow") - // Should always be drawn behind the background. - z: background.z - 1 - } - Popup { id: content // Ensure that the content is located directly below the headerItem - y: background.height + base.shadowOffset + y: background.height + base.popupOffset // Make the content aligned with the rest, using the property contentAlignment to decide whether is right or left. // In case of right alignment, the 3x padding is due to left, right and padding between the button & text. diff --git a/resources/qml/ExtruderButton.qml b/resources/qml/ExtruderButton.qml index feb399d528..b87855e25e 100644 --- a/resources/qml/ExtruderButton.qml +++ b/resources/qml/ExtruderButton.qml @@ -22,6 +22,7 @@ Cura.ToolbarButton { materialColor: extruder.color extruderEnabled: extruder.stack.isEnabled + iconVariant: "default" property int index: extruder.index } diff --git a/resources/qml/ExtruderIcon.qml b/resources/qml/ExtruderIcon.qml index 1c93966519..f33e345b68 100644 --- a/resources/qml/ExtruderIcon.qml +++ b/resources/qml/ExtruderIcon.qml @@ -1,7 +1,7 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2021 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.11 import QtQuick.Controls 1.1 import UM 1.2 as UM @@ -16,30 +16,30 @@ Item property color materialColor property alias textColor: extruderNumberText.color property bool extruderEnabled: true + property alias iconSize: mainIcon.sourceSize + property string iconVariant: "medium" - UM.RecolorImage + Item { - id: mainIcon + opacity: extruderEnabled ? 1 : UM.Theme.getColor("extruder_disabled").a anchors.fill: parent - source: UM.Theme.getIcon("Extruder", "medium") - color: extruderEnabled ? materialColor: UM.Theme.getColor("disabled") - } - - Rectangle - { - id: extruderNumberCircle - - width: height - height: Math.round(parent.height / 2) - radius: Math.round(width) - color: UM.Theme.getColor("toolbar_background") + UM.RecolorImage + { + anchors.fill: parent + sourceSize: mainIcon.sourceSize - anchors + source: UM.Theme.getIcon("ExtruderColor", iconVariant) + color: materialColor + } + UM.RecolorImage { - horizontalCenter: parent.horizontalCenter - top: parent.top - topMargin: (parent.height - height) / 2 + id: mainIcon + anchors.fill: parent + sourceSize: UM.Theme.getSize("extruder_icon") + + source: UM.Theme.getIcon("Extruder", iconVariant) + color: extruderNumberText.color } Label @@ -47,25 +47,13 @@ Item id: extruderNumberText anchors.centerIn: parent text: index + 1 - font: UM.Theme.getFont("small") + font: UM.Theme.getFont("small_emphasis") color: UM.Theme.getColor("text") width: contentWidth height: contentHeight - visible: extruderEnabled renderType: Text.NativeRendering horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } - - UM.RecolorImage - { - id: disabledIcon - anchors.fill: parent - anchors.margins: UM.Theme.getSize("thick_lining").width - sourceSize.height: width - source: UM.Theme.getIcon("Cancel") - visible: !extruderEnabled - color: UM.Theme.getColor("text") - } } } diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml index cb7d5c3d88..c670abb67a 100644 --- a/resources/qml/MainWindow/MainWindowHeader.qml +++ b/resources/qml/MainWindow/MainWindowHeader.qml @@ -62,7 +62,7 @@ Item anchors.verticalCenter: parent.verticalCenter exclusiveGroup: mainWindowHeaderMenuGroup style: UM.Theme.styles.main_window_header_tab - height: UM.Theme.getSize("main_window_header_button").height + height: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) iconSource: model.stage.iconSource property color overlayColor: "transparent" diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml index 9d9437776d..43ccde461e 100644 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml @@ -56,13 +56,13 @@ Cura.ExpandablePopup id: extruderIcon materialColor: model.color extruderEnabled: model.enabled - width: UM.Theme.getSize("button_icon").width anchors.verticalCenter: parent.verticalCenter } - Item + ColumnLayout { - height: childrenRect.height + opacity: model.enabled ? 1 : UM.Theme.getColor("extruder_disabled").a + spacing: 0 anchors { left: extruderIcon.right @@ -81,13 +81,8 @@ Cura.ExpandablePopup font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") renderType: Text.NativeRendering + width: parent.width - anchors - { - top: parent.top - left: parent.left - right: parent.right - } visible: !truncated } @@ -100,13 +95,7 @@ Cura.ExpandablePopup font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") renderType: Text.NativeRendering - - anchors - { - top: parent.top - left: parent.left - right: parent.right - } + width: parent.width visible: !materialBrandColorTypeLabel.visible && !truncated } @@ -120,13 +109,7 @@ Cura.ExpandablePopup font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") renderType: Text.NativeRendering - - anchors - { - top: parent.top - left: parent.left - right: parent.right - } + width: parent.width visible: !materialBrandColorTypeLabel.visible && !materialColorTypeLabel.visible } // Label that shows the name of the variant @@ -141,13 +124,7 @@ Cura.ExpandablePopup font: UM.Theme.getFont("default_bold") color: UM.Theme.getColor("text") renderType: Text.NativeRendering - - anchors - { - left: parent.left - top: materialBrandColorTypeLabel.bottom - right: parent.right - } + width: parent.width } } } diff --git a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml index 7d1393151f..8376693ad1 100644 --- a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml +++ b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml @@ -302,15 +302,15 @@ Item } Item { - width: instructionButton.width + 2 * UM.Theme.getSize("default_margin").width + width: instructionButton.width + 2 * UM.Theme.getSize("narrow_margin").width height: instructionButton.visible ? materialSelection.height: 0 Button { id: instructionButton hoverEnabled: true contentItem: Item {} - height: 0.5 * materialSelection.height - width: height + height: UM.Theme.getSize("small_button").height + width: UM.Theme.getSize("small_button").width anchors.centerIn: parent background: UM.RecolorImage { diff --git a/resources/qml/ObjectItemButton.qml b/resources/qml/ObjectItemButton.qml index 7d8988fde4..1637b8d0cd 100644 --- a/resources/qml/ObjectItemButton.qml +++ b/resources/qml/ObjectItemButton.qml @@ -13,8 +13,6 @@ Button width: parent.width height: UM.Theme.getSize("action_button").height - leftPadding: UM.Theme.getSize("thin_margin").width - rightPadding: perObjectSettingsInfo.visible ? UM.Theme.getSize("default_lining").width : UM.Theme.getSize("thin_margin").width checkable: true hoverEnabled: true @@ -46,14 +44,14 @@ Button width: objectItemButton.width - objectItemButton.leftPadding height: UM.Theme.getSize("action_button").height - UM.RecolorImage + Rectangle { id: swatch anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left - width: height - height: parent.height - UM.Theme.getSize("narrow_margin").height - source: UM.Theme.getIcon("Extruder", "medium") + width: UM.Theme.getSize("standard_arrow").height + height: UM.Theme.getSize("standard_arrow").height + radius: Math.round(width / 2) color: extruderColor visible: showExtruderSwatches && extruderColor != "" } diff --git a/resources/qml/PrimaryButton.qml b/resources/qml/PrimaryButton.qml index fca63d2cdb..52c460bde4 100644 --- a/resources/qml/PrimaryButton.qml +++ b/resources/qml/PrimaryButton.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2021 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -9,8 +9,6 @@ import Cura 1.1 as Cura Cura.ActionButton { - shadowEnabled: true - shadowColor: enabled ? UM.Theme.getColor("primary_button_shadow"): UM.Theme.getColor("action_button_disabled_shadow") color: UM.Theme.getColor("primary_button") textColor: UM.Theme.getColor("primary_button_text") outlineColor: "transparent" diff --git a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml index 92cbd7dd89..cde2cd8dfc 100644 --- a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml +++ b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml @@ -226,9 +226,12 @@ Item { Cura.ExtruderIcon { - anchors.horizontalCenter: parent.horizontalCenter + anchors.centerIn: parent materialColor: model.color extruderEnabled: model.enabled + iconVariant: "default" + height: parent.height + width: height } } onClicked: diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelector.qml b/resources/qml/PrintSetupSelector/PrintSetupSelector.qml index a378290b03..414c349bb6 100644 --- a/resources/qml/PrintSetupSelector/PrintSetupSelector.qml +++ b/resources/qml/PrintSetupSelector/PrintSetupSelector.qml @@ -17,9 +17,6 @@ Cura.ExpandableComponent contentPadding: UM.Theme.getSize("default_lining").width contentHeaderTitle: catalog.i18nc("@label", "Print settings") - enableHeaderShadow: false - headerBackgroundBorder.width: UM.Theme.getSize("default_lining").width - headerBackgroundBorder.color: UM.Theme.getColor("lining") enabled: !preSlicedData disabledText: catalog.i18nc("@label shown when we load a Gcode file", "Print setup disabled. G-code file can not be modified.") diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml index ff9204655f..3b6fc37eb4 100644 --- a/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml +++ b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml @@ -15,7 +15,8 @@ RowLayout Cura.IconWithText { - source: UM.Theme.getIcon("PrintQuality") + source: UM.Theme.getIcon("Sliders", "medium") + iconSize: UM.Theme.getSize("button_icon").width text: { if (Cura.MachineManager.activeStack) @@ -53,6 +54,7 @@ RowLayout source: UM.Theme.getIcon("Infill1") text: Cura.MachineManager.activeStack ? parseInt(infillDensity.properties.value) + "%" : "0%" font: UM.Theme.getFont("medium") + iconSize: UM.Theme.getSize("medium_button_icon").width UM.SettingPropertyProvider { @@ -68,6 +70,7 @@ RowLayout source: UM.Theme.getIcon("Support") text: supportEnabled.properties.value == "True" ? enabledText : disabledText font: UM.Theme.getFont("medium") + iconSize: UM.Theme.getSize("medium_button_icon").width UM.SettingPropertyProvider { @@ -83,6 +86,7 @@ RowLayout source: UM.Theme.getIcon("Adhesion") text: platformAdhesionType.properties.value != "skirt" && platformAdhesionType.properties.value != "none" ? enabledText : disabledText font: UM.Theme.getFont("medium") + iconSize: UM.Theme.getSize("medium_button_icon").width UM.SettingPropertyProvider { diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml index df2c1bfae6..a3a5047ee9 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml @@ -29,6 +29,7 @@ Item text: catalog.i18nc("@label", "Adhesion") font: UM.Theme.getFont("medium") width: labelColumnWidth + iconSize: UM.Theme.getSize("medium_button_icon").width } Item diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml index 8da97437cf..705a3e95ef 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml @@ -43,7 +43,7 @@ Item { return UM.Theme.getIcon("Infill2") } - return UM.Theme.getIcon("Solid") + return UM.Theme.getIcon("Infill100") } } @@ -65,6 +65,7 @@ Item text: catalog.i18nc("@label", "Infill") + " (%)" font: UM.Theme.getFont("medium") width: labelColumnWidth + iconSize: UM.Theme.getSize("medium_button_icon").width } Item @@ -119,6 +120,8 @@ Item implicitWidth: UM.Theme.getSize("print_setup_slider_handle").width implicitHeight: implicitWidth radius: Math.round(implicitWidth / 2) + border.color: UM.Theme.getColor("slider_groove_fill") + border.width: UM.Theme.getSize("default_lining").height } tickmarks: Repeater diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml index a8e19c7357..0823b5cb62 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml @@ -52,6 +52,7 @@ Item text: catalog.i18nc("@label", "Profiles") font: UM.Theme.getFont("medium") width: labelColumnWidth + iconSize: UM.Theme.getSize("medium_button_icon").width } UM.SimpleButton { @@ -91,6 +92,7 @@ Item { left: profileLabel.right right: parent.right + verticalCenter: profileLabel.verticalCenter } model: Cura.QualityProfilesDropDownMenuModel diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml index 924dcd5ec4..4e2341fb57 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml @@ -30,6 +30,7 @@ Item text: catalog.i18nc("@label", "Support") font: UM.Theme.getFont("medium") width: labelColumnWidth + iconSize: UM.Theme.getSize("medium_button_icon").width } Item @@ -218,18 +219,16 @@ Item elide: Text.ElideLeft verticalAlignment: Text.AlignVCenter - background: UM.RecolorImage + background: Rectangle { id: swatch height: Math.round(parent.height / 2) width: height + radius: Math.round(width / 2) anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter anchors.rightMargin: UM.Theme.getSize("thin_margin").width - sourceSize.width: width - sourceSize.height: height - source: UM.Theme.getIcon("Extruder", "medium") color: supportExtruderCombobox.color } } @@ -288,18 +287,16 @@ Item verticalAlignment: Text.AlignVCenter rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width - background: UM.RecolorImage + background: Rectangle { id: swatch height: Math.round(parent.height / 2) width: height + radius: Math.round(width / 2) anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter anchors.rightMargin: UM.Theme.getSize("thin_margin").width - sourceSize.width: width - sourceSize.height: height - source: UM.Theme.getIcon("Extruder", "medium") color: supportExtruderCombobox.model.getItem(index).color } } diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml index 7c74be1605..c12e364339 100644 --- a/resources/qml/PrinterSelector/MachineSelector.qml +++ b/resources/qml/PrinterSelector/MachineSelector.qml @@ -93,11 +93,11 @@ Cura.ExpandablePopup { if (isGroup) { - return UM.Theme.getIcon("PrinterTriple") + return UM.Theme.getIcon("PrinterTriple", "medium") } else if (isNetworkPrinter || isCloudRegistered) { - return UM.Theme.getIcon("Printer") + return UM.Theme.getIcon("Printer", "medium") } else { @@ -114,8 +114,9 @@ Cura.ExpandablePopup anchors { bottom: parent.bottom + bottomMargin: - height * 1 / 6 left: parent.left - leftMargin: UM.Theme.getSize("thick_margin").width + leftMargin: iconSize - width * 5 / 6 } source: @@ -124,13 +125,9 @@ Cura.ExpandablePopup { return UM.Theme.getIcon("CheckBlueBG", "low") } - else if (connectionStatus == "printer_cloud_connected") + else if (connectionStatus == "printer_cloud_connected" || connectionStatus == "printer_cloud_not_available") { - return UM.Theme.getIcon("CloudBlueBG", "low") - } - else if (connectionStatus == "printer_cloud_not_available") - { - return UM.Theme.getIcon("CloudGreyBG", "low") + return UM.Theme.getIcon("CloudBadge", "low") } else { @@ -150,11 +147,10 @@ Cura.ExpandablePopup { id: iconBackground anchors.centerIn: parent - // Make it a bit bigger so there is an outline - width: parent.width + 2 * UM.Theme.getSize("default_lining").width - height: parent.height + 2 * UM.Theme.getSize("default_lining").height - radius: Math.round(width / 2) - color: UM.Theme.getColor("main_background") + width: parent.width - 1.5 //1.5 pixels smaller, (at least sqrt(2), regardless of screen 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 } diff --git a/resources/qml/RadioCheckbar.qml b/resources/qml/RadioCheckbar.qml index 0b8709fe7a..5aea771a44 100644 --- a/resources/qml/RadioCheckbar.qml +++ b/resources/qml/RadioCheckbar.qml @@ -146,6 +146,7 @@ Item } radius: Math.round(width / 2) color: activeColor + border.color: defaultItemColor visible: checkbox.checked } } diff --git a/resources/qml/SecondaryButton.qml b/resources/qml/SecondaryButton.qml index f03d8acdfa..ba4e0bb2c1 100644 --- a/resources/qml/SecondaryButton.qml +++ b/resources/qml/SecondaryButton.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2021 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -9,11 +9,9 @@ import Cura 1.1 as Cura Cura.ActionButton { - shadowEnabled: true - shadowColor: enabled ? UM.Theme.getColor("secondary_button_shadow"): UM.Theme.getColor("action_button_disabled_shadow") color: UM.Theme.getColor("secondary_button") textColor: UM.Theme.getColor("secondary_button_text") - outlineColor: "transparent" + outlineColor: UM.Theme.getColor("secondary_button_text") disabledColor: UM.Theme.getColor("action_button_disabled") textDisabledColor: UM.Theme.getColor("action_button_disabled_text") hoverColor: UM.Theme.getColor("secondary_button_hover") diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml index a42db9cdcb..5beb6e209e 100644 --- a/resources/qml/Settings/SettingCategory.qml +++ b/resources/qml/Settings/SettingCategory.qml @@ -16,10 +16,13 @@ Button anchors.rightMargin: 2 * UM.Theme.getSize("thin_margin").width hoverEnabled: true + height: UM.Theme.getSize("section_icon_column").height + background: Rectangle { id: backgroundRectangle height: UM.Theme.getSize("section").height + anchors.verticalCenter: parent.verticalCenter color: { if (!base.enabled) @@ -107,8 +110,8 @@ Button source: UM.Theme.getIcon(definition.icon) width: UM.Theme.getSize("section_icon").width height: UM.Theme.getSize("section_icon").height - sourceSize.width: width + 15 * screenScaleFactor - sourceSize.height: width + 15 * screenScaleFactor + sourceSize.width: width + sourceSize.height: width } onClicked: @@ -141,8 +144,8 @@ Button id: settingsButton visible: base.hovered || settingsButton.hovered - height: Math.round(base.height * 0.6) - width: Math.round(base.height * 0.6) + height: UM.Theme.getSize("small_button_icon").height + width: height anchors { @@ -184,7 +187,7 @@ Button return false } - height: Math.round(parent.height / 2) + height: UM.Theme.getSize("small_button_icon").height width: height onClicked: diff --git a/resources/qml/Settings/SettingExtruder.qml b/resources/qml/Settings/SettingExtruder.qml index 995e1103f3..ea514eb069 100644 --- a/resources/qml/Settings/SettingExtruder.qml +++ b/resources/qml/Settings/SettingExtruder.qml @@ -77,7 +77,7 @@ SettingItem currentIndex: propertyProvider.properties.value !== undefined ? propertyProvider.properties.value : 0 - property string color: "#fff" + property string color: "transparent" Binding { @@ -85,7 +85,7 @@ SettingItem // explicit binding here otherwise we do not handle value changes after the model changes. target: control property: "color" - value: control.currentText != "" ? control.model.getItem(control.currentIndex).color : "" + value: control.currentText != "" ? control.model.getItem(control.currentIndex).color : "transparent" } Binding @@ -160,18 +160,16 @@ SettingItem elide: Text.ElideLeft verticalAlignment: Text.AlignVCenter - background: UM.RecolorImage + background: Rectangle { id: swatch height: Math.round(parent.height / 2) width: height + radius: Math.round(width / 2) anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter anchors.rightMargin: UM.Theme.getSize("thin_margin").width - sourceSize.width: width - sourceSize.height: height - source: UM.Theme.getIcon("Extruder", "medium") color: control.color } } @@ -229,18 +227,16 @@ SettingItem verticalAlignment: Text.AlignVCenter rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width - background: UM.RecolorImage + background: Rectangle { id: swatch height: Math.round(parent.height / 2) width: height + radius: Math.round(width / 2) anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter anchors.rightMargin: UM.Theme.getSize("thin_margin").width - sourceSize.width: width - sourceSize.height: height - source: UM.Theme.getIcon("Extruder", "medium") color: control.model.getItem(index).color } } diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index a377d08cfc..35172fc799 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -156,7 +156,7 @@ Item { id: settingControls - height: UM.Theme.getSize("section_control").height + height: UM.Theme.getSize("small_button_icon").height spacing: Math.round(UM.Theme.getSize("thick_margin").height / 2) anchors @@ -174,6 +174,7 @@ Item anchors.top: parent.top anchors.bottom: parent.bottom + height: UM.Theme.getSize("small_button_icon").height width: height color: UM.Theme.getColor("setting_control_button") @@ -203,6 +204,7 @@ Item anchors.top: parent.top anchors.bottom: parent.bottom + height: UM.Theme.getSize("small_button_icon").height width: height color: UM.Theme.getColor("setting_control_button") @@ -286,6 +288,7 @@ Item anchors.top: parent.top anchors.bottom: parent.bottom + height: UM.Theme.getSize("small_button_icon").height width: height onClicked: diff --git a/resources/qml/Settings/SettingOptionalExtruder.qml b/resources/qml/Settings/SettingOptionalExtruder.qml index 5b1da6b785..94df1bcc03 100644 --- a/resources/qml/Settings/SettingOptionalExtruder.qml +++ b/resources/qml/Settings/SettingOptionalExtruder.qml @@ -88,7 +88,7 @@ SettingItem when: control.model.items.length > 0 } - property string color: "#fff" + property string color: "transparent" Binding { @@ -96,7 +96,7 @@ SettingItem // explicit binding here otherwise we do not handle value changes after the model changes. target: control property: "color" - value: control.currentText != "" ? control.model.getItem(control.currentIndex).color : "" + value: control.currentText != "" ? control.model.getItem(control.currentIndex).color : "transparent" } indicator: UM.RecolorImage @@ -161,18 +161,16 @@ SettingItem elide: Text.ElideRight verticalAlignment: Text.AlignVCenter - background: UM.RecolorImage + background: Rectangle { id: swatch height: Math.round(parent.height / 2) width: height + radius: Math.round(width / 2) anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter anchors.rightMargin: UM.Theme.getSize("thin_margin").width - sourceSize.width: width - sourceSize.height: height - source: UM.Theme.getIcon("Extruder", "medium") color: control.color } } @@ -226,18 +224,16 @@ SettingItem verticalAlignment: Text.AlignVCenter rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width - background: UM.RecolorImage + background: Rectangle { id: swatch height: Math.round(parent.height / 2) width: height + radius: Math.round(width / 2) anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter anchors.rightMargin: UM.Theme.getSize("thin_margin").width - sourceSize.width: width - sourceSize.height: height - source: UM.Theme.getIcon("Extruder", "medium") color: control.model.getItem(index).color } } diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index f038d15ca3..fc920a30e7 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -65,7 +65,13 @@ Item anchors.right: clearFilterButton.left anchors.rightMargin: Math.round(UM.Theme.getSize("thick_margin").width) - placeholderText: "<img align='middle' src='"+ UM.Theme.getIcon("Magnifier") +"'>" + "<div vertical-align=bottom>" + catalog.i18nc("@label:textbox", "Search settings") + placeholderText: + { + var imageSize = "width='" + UM.Theme.getSize("small_button_icon").width + "' height='" + UM.Theme.getSize("small_button_icon").height + var imageSource = "' src='"+ UM.Theme.getIcon("Magnifier") + var searchPlaceholder = catalog.i18nc("@label:textbox", "Search settings") + return "<img align='middle' " + imageSize + imageSource +"'>" + "<div vertical-align=bottom>" + searchPlaceholder + } style: TextFieldStyle { @@ -188,8 +194,8 @@ Item { anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height + width: UM.Theme.getSize("medium_button_icon").width + height: UM.Theme.getSize("medium_button_icon").height sourceSize.width: width sourceSize.height: height color: control.hovered ? UM.Theme.getColor("small_button_text_hover") : UM.Theme.getColor("small_button_text") diff --git a/resources/qml/TertiaryButton.qml b/resources/qml/TertiaryButton.qml index eb714c22f6..76684b6ef2 100644 --- a/resources/qml/TertiaryButton.qml +++ b/resources/qml/TertiaryButton.qml @@ -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 QtQuick 2.2 @@ -9,8 +9,6 @@ import Cura 1.1 as Cura Cura.ActionButton { - shadowEnabled: true - shadowColor: enabled ? UM.Theme.getColor("secondary_button_shadow"): UM.Theme.getColor("action_button_disabled_shadow") color: "transparent" textColor: UM.Theme.getColor("text_link") outlineColor: "transparent" diff --git a/resources/qml/Toolbar.qml b/resources/qml/Toolbar.qml index ec4d29420b..c948bb8242 100644 --- a/resources/qml/Toolbar.qml +++ b/resources/qml/Toolbar.qml @@ -68,7 +68,8 @@ Item source: UM.Theme.getIcon(model.icon) != "" ? UM.Theme.getIcon(model.icon) : "file:///" + model.location + "/" + model.icon color: UM.Theme.getColor("icon") - sourceSize: Math.round(UM.Theme.getSize("button") / 2) + sourceSize.height: Math.round(UM.Theme.getSize("button").height / 2) + sourceSize.width: Math.round(UM.Theme.getSize("button").width / 2) } onCheckedChanged: diff --git a/resources/qml/ViewOrientationButton.qml b/resources/qml/ViewOrientationButton.qml index 5d72de9a8d..7040447b29 100644 --- a/resources/qml/ViewOrientationButton.qml +++ b/resources/qml/ViewOrientationButton.qml @@ -11,5 +11,4 @@ UM.SimpleButton height: UM.Theme.getSize("small_button").height hoverColor: UM.Theme.getColor("small_button_text_hover") color: UM.Theme.getColor("small_button_text") - iconMargin: UM.Theme.getSize("thick_lining").width }
\ No newline at end of file diff --git a/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml b/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml index 5334a15974..58cadbec37 100644 --- a/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml +++ b/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2019 Ultimaker B.V. +// Copyright (c) 2021 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.10 @@ -214,16 +214,16 @@ Item id: troubleshootingButton anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("thin_margin").width anchors.verticalCenter: parent.verticalCenter height: troubleshootingLinkIcon.height - width: troubleshootingLinkIcon.width + troubleshootingLabel.width + UM.Theme.getSize("default_margin").width + width: troubleshootingLinkIcon.width + troubleshootingLabel.width + UM.Theme.getSize("thin_margin").width UM.RecolorImage { id: troubleshootingLinkIcon anchors.right: troubleshootingLabel.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("thin_margin").width anchors.verticalCenter: parent.verticalCenter height: troubleshootingLabel.height width: height diff --git a/resources/qml/Widgets/TextField.qml b/resources/qml/Widgets/TextField.qml index 28074d4415..c126c8a6e0 100644 --- a/resources/qml/Widgets/TextField.qml +++ b/resources/qml/Widgets/TextField.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2019 Ultimaker B.V. +// Copyright (c) 2021 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.10 @@ -15,6 +15,8 @@ TextField { id: textField + property alias leftIcon: iconLeft.source + UM.I18nCatalog { id: catalog; name: "cura" } hoverEnabled: true @@ -22,6 +24,7 @@ TextField font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") renderType: Text.NativeRendering + leftPadding: iconLeft.visible ? iconLeft.width + UM.Theme.getSize("default_margin").width * 2 : UM.Theme.getSize("thin_margin").width states: [ State @@ -52,7 +55,6 @@ TextField color: UM.Theme.getColor("main_background") - anchors.margins: Math.round(UM.Theme.getSize("default_lining").width) radius: UM.Theme.getSize("setting_control_radius").width border.color: @@ -67,5 +69,23 @@ TextField } return UM.Theme.getColor("setting_control_border") } + + //Optional icon added on the left hand side. + UM.RecolorImage + { + id: iconLeft + + anchors + { + verticalCenter: parent.verticalCenter + left: parent.left + leftMargin: UM.Theme.getSize("default_margin").width + } + + visible: source != "" + height: UM.Theme.getSize("small_button_icon").height + width: visible ? height : 0 + color: textField.color + } } } diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS-X_A.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS-X_A.inst.cfg new file mode 100644 index 0000000000..76ec06262a --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS-X_A.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = a +weight = 1 +material = emotiontech_absx +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 19 * layer_height +cool_min_speed = 10 +support_angle = 65 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 100 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS-X_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS-X_B.inst.cfg new file mode 100644 index 0000000000..f3f24b3469 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS-X_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_absx +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 14 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature + 3 +material_flow = 96 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS-X_C.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS-X_C.inst.cfg new file mode 100644 index 0000000000..1a81a07607 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS-X_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = c +weight = -1 +material = emotiontech_absx +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 9 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_flow = 91 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS_A.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS_A.inst.cfg new file mode 100644 index 0000000000..ccb80ab2f1 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS_A.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = a +weight = 1 +material = emotiontech_abs +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 19 * layer_height +cool_min_speed = 10 +support_angle = 65 +material_print_temperature = =default_material_print_temperature + 1 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 100 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS_B.inst.cfg new file mode 100644 index 0000000000..25f6aef09a --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_abs +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 14 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature + 1 +material_flow = 96 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS_C.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS_C.inst.cfg new file mode 100644 index 0000000000..3413ce30aa --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ABS_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = c +weight = -1 +material = emotiontech_abs +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 9 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +3 +material_flow = 91 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ACETATE_A.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ACETATE_A.inst.cfg new file mode 100644 index 0000000000..739ae5bf06 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ACETATE_A.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = a +weight = 1 +material = emotiontech_acetate +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 37/50) +speed_wall_0 = =math.ceil(speed_wall * 30/37) +speed_topbottom = =math.ceil(speed_print * 33/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 10 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 98 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ACETATE_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ACETATE_B.inst.cfg new file mode 100644 index 0000000000..7787def8bb --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ACETATE_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_acetate +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 40/55) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 27/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 7 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =default_material_print_temperature + 0 +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ACETATE_C.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ACETATE_C.inst.cfg new file mode 100644 index 0000000000..f670bb6eb1 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ACETATE_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = c +weight = -1 +material = emotiontech_acetate +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 45/60) +speed_wall_0 = =math.ceil(speed_wall * 33/45) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 5 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature + 3 +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ASA-X_A.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ASA-X_A.inst.cfg new file mode 100644 index 0000000000..cfe30caf9f --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ASA-X_A.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = a +weight = 1 +material = emotiontech_asax +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 40 +cool_fan_speed_max = 75 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 19 * layer_height +cool_min_speed = 10 +support_angle = 65 +material_print_temperature = =default_material_print_temperature + 1 +material_print_temperature_layer_0 = =default_material_print_temperature + 3 +material_flow = 100 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ASA-X_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ASA-X_B.inst.cfg new file mode 100644 index 0000000000..2d113281a8 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ASA-X_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_asax +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 40 +cool_fan_speed_max = 75 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 14 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_flow = 96 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ASA-X_C.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ASA-X_C.inst.cfg new file mode 100644 index 0000000000..7dc65e54da --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_ASA-X_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = c +weight = -1 +material = emotiontech_asax +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 40 +cool_fan_speed_max = 75 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 9 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature + 7 +material_flow = 91 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_COPA_A.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_COPA_A.inst.cfg new file mode 100644 index 0000000000..010c252721 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_COPA_A.inst.cfg @@ -0,0 +1,62 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = a +weight = 1 +material = emotiontech_copa +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +wall_line_count = 3 +speed_print = 35 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 20 +cool_fan_speed_max = 80 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 2 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 2 +cool_lift_head = True +support_angle = 45 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_initial_print_temperature = =default_material_print_temperature +material_final_print_temperature = =default_material_print_temperature +material_flow = 91 +skin_material_flow = 92 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True +bridge_settings_enabled = True +bridge_wall_coast = 50 +bridge_wall_speed = 8 +bridge_wall_material_flow = 50 +bridge_skin_speed = 8 +bridge_skin_material_flow = 60 +bridge_skin_density = 80 +bridge_fan_speed = 80 +meshfix_maximum_resolution = 0.5 +meshfix_maximum_deviation = 0.04 diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_COPA_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_COPA_B.inst.cfg new file mode 100644 index 0000000000..80c7c4c6ad --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_COPA_B.inst.cfg @@ -0,0 +1,62 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_copa +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +wall_line_count = 3 +speed_print = 35 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 20 +cool_fan_speed_max = 80 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 2 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 2 +cool_lift_head = True +support_angle = 60 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_initial_print_temperature = =default_material_print_temperature +material_final_print_temperature = =default_material_print_temperature +material_flow = 91 +skin_material_flow = 92 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True +bridge_settings_enabled = True +bridge_wall_coast = 50 +bridge_wall_speed = 8 +bridge_wall_material_flow = 50 +bridge_skin_speed = 8 +bridge_skin_material_flow = 60 +bridge_skin_density = 80 +bridge_fan_speed = 80 +meshfix_maximum_resolution = 0.5 +meshfix_maximum_deviation = 0.04 diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_COPA_C.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_COPA_C.inst.cfg new file mode 100644 index 0000000000..5de7b0ea9f --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_COPA_C.inst.cfg @@ -0,0 +1,62 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = c +weight = -1 +material = emotiontech_copa +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +wall_line_count = 3 +speed_print = 35 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 20 +cool_fan_speed_max = 80 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 2 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 2 +cool_lift_head = True +support_angle = 60 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_initial_print_temperature = =default_material_print_temperature +material_final_print_temperature = =default_material_print_temperature +material_flow = 91 +skin_material_flow = 92 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True +bridge_settings_enabled = True +bridge_wall_coast = 50 +bridge_wall_speed = 8 +bridge_wall_material_flow = 50 +bridge_skin_speed = 8 +bridge_skin_material_flow = 60 +bridge_skin_density = 80 +bridge_fan_speed = 80 +meshfix_maximum_resolution = 0.5 +meshfix_maximum_deviation = 0.04 diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_HIPS_A.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_HIPS_A.inst.cfg new file mode 100644 index 0000000000..cb3871fc6d --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_HIPS_A.inst.cfg @@ -0,0 +1,50 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = a +weight = 1 +material = emotiontech_hips +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 14 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 97 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_bottom_stair_step_height = 0 +support_bottom_stair_step_width = 0 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.5 +support_xy_distance_overhang = =line_width*0 +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_HIPS_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_HIPS_B.inst.cfg new file mode 100644 index 0000000000..d29a61bae6 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_HIPS_B.inst.cfg @@ -0,0 +1,50 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_hips +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 9 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 97 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_bottom_stair_step_height = 0 +support_bottom_stair_step_width = 0 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.5 +support_xy_distance_overhang = =line_width*0 +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_HIPS_C.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_HIPS_C.inst.cfg new file mode 100644 index 0000000000..46b30ef1a1 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_HIPS_C.inst.cfg @@ -0,0 +1,50 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = c +weight = -1 +material = emotiontech_hips +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 97 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_bottom_stair_step_height = 0 +support_bottom_stair_step_width = 0 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.5 +support_xy_distance_overhang = =line_width*0 +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PC_A.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PC_A.inst.cfg new file mode 100644 index 0000000000..c2065bf506 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PC_A.inst.cfg @@ -0,0 +1,61 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = a +weight = 1 +material = emotiontech_pc +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 35 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 10 +cool_fan_speed_max = 10 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 2 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 12 +support_angle = 60 +cool_lift_head = true +material_print_temperature = 260 +material_print_temperature_layer_0 = 265 +material_flow = 88 +wall_line_count = 3 +retraction_extra_prime_amount = 0.1 +retraction_speed = 30 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True +adhesion_type = brim + +bridge_settings_enabled = True +bridge_wall_coast = 50 +bridge_wall_speed = 12 +bridge_wall_material_flow = 50 +bridge_skin_speed = 12.5 +bridge_skin_material_flow = 100 +bridge_skin_density = 80 +bridge_fan_speed = 100 + diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PC_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PC_B.inst.cfg new file mode 100644 index 0000000000..e3804df9e2 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PC_B.inst.cfg @@ -0,0 +1,61 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_pc +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 35 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 10 +cool_fan_speed_max = 10 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 2 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 12 +cool_lift_head = true +support_angle = 60 +material_print_temperature = 270 +material_print_temperature_layer_0 = 275 +material_flow = 88 +wall_line_count = 3 +retraction_speed = 30 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True + +adhesion_type = brim + +bridge_settings_enabled = True +bridge_wall_coast = 50 +bridge_wall_speed = 12 +bridge_wall_material_flow = 50 +bridge_skin_speed = 12.5 +bridge_skin_material_flow = 100 +bridge_skin_density = 80 +bridge_fan_speed = 100 diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PC_C.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PC_C.inst.cfg new file mode 100644 index 0000000000..453c4c8700 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PC_C.inst.cfg @@ -0,0 +1,61 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = c +weight = -1 +material = emotiontech_pc +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 35 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 10 +cool_fan_speed_max = 10 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 2 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 12 +support_angle = 60 +cool_lift_head = true +material_print_temperature = 270 +material_print_temperature_layer_0 = 275 +material_flow = 88 +wall_line_count = 3 +retraction_speed = 30 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True + +adhesion_type = brim + +bridge_settings_enabled = True +bridge_wall_coast = 50 +bridge_wall_speed = 12 +bridge_wall_material_flow = 50 +bridge_skin_speed = 12.5 +bridge_skin_material_flow = 100 +bridge_skin_density = 80 +bridge_fan_speed = 100 diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PEKK_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PEKK_B.inst.cfg new file mode 100644 index 0000000000..3782c7f994 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PEKK_B.inst.cfg @@ -0,0 +1,58 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_pekk +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +initial_layer_line_width_factor = 120 +material_flow_layer_0 = 120 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = 10 +speed_travel_layer_0 = 100 +skirt_brim_speed = 5 +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 30 +cool_fan_speed_max = 30 +cool_min_layer_time_fan_speed_max = 10 +cool_min_layer_time = 11 +cool_fan_full_layer = 2 +cool_min_speed = 5 +support_angle = 45 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature + 15 +material_flow = 105 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 105 +prime_tower_enable = True +bridge_settings_enabled = True +bridge_wall_speed = 5 +bridge_wall_material_flow = 185 +bridge_skin_speed = =bridge_wall_speed +bridge_skin_material_flow = =bridge_wall_material_flow +bridge_fan_speed = 100 +bridge_enable_more_layers = False diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PETG_A.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PETG_A.inst.cfg new file mode 100644 index 0000000000..a5bf7374ca --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PETG_A.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = a +weight = 1 +material = emotiontech_petg +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 65 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 98 +retraction_extra_prime_amount = 0 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PETG_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PETG_B.inst.cfg new file mode 100644 index 0000000000..91d3015b25 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PETG_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_petg +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PETG_C.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PETG_C.inst.cfg new file mode 100644 index 0000000000..77bd280b59 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PETG_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = c +weight = -1 +material = emotiontech_petg +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature +5 +material_flow = 91 +retraction_extra_prime_amount = 0 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_A.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_A.inst.cfg new file mode 100644 index 0000000000..5ee51facb5 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_A.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = a +weight = 1 +material = emotiontech_pla +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 65 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature -5 +material_flow = 98 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_B.inst.cfg new file mode 100644 index 0000000000..b575c4db11 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_pla +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_C.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_C.inst.cfg new file mode 100644 index 0000000000..3dd12ec3d3 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = c +weight = -1 +material = emotiontech_pla +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_flow = 91 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_HT_A.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_HT_A.inst.cfg new file mode 100644 index 0000000000..46a34e8290 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_HT_A.inst.cfg @@ -0,0 +1,55 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = a +weight = 1 +material = emotiontech_pla_hr_870 +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +wall_line_count = 3 +speed_print = 30 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 2 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 4 +support_angle = 65 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature + 10 +material_initial_print_temperature = =default_material_print_temperature + 5 +material_final_print_temperature = =default_material_print_temperature + 5 +material_flow = 91 +skin_material_flow = 92 +retraction_amount = 2 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True +meshfix_maximum_resolution = 0.5 +meshfix_maximum_deviation = 0.04 +cool_lift_head = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_HT_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_HT_B.inst.cfg new file mode 100644 index 0000000000..504695192f --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_HT_B.inst.cfg @@ -0,0 +1,54 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_pla_hr_870 +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 2 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 4 +support_angle = 60 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_initial_print_temperature = =default_material_print_temperature +material_final_print_temperature = =default_material_print_temperature +material_flow = 91 +skin_material_flow = 92 +retraction_amount = 2 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True +meshfix_maximum_resolution = 0.5 +meshfix_maximum_deviation = 0.04 +cool_lift_head = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_HT_C.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_HT_C.inst.cfg new file mode 100644 index 0000000000..1bc06df105 --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_PLA_HT_C.inst.cfg @@ -0,0 +1,54 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = c +weight = -1 +material = emotiontech_pla_hr_870 +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 2 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 4 +support_angle = 55 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_initial_print_temperature = =default_material_print_temperature +material_final_print_temperature = =default_material_print_temperature +material_flow = 91 +skin_material_flow = 92 +retraction_amount = 2 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True +meshfix_maximum_resolution = 0.5 +meshfix_maximum_deviation = 0.04 +cool_lift_head = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_TPU98A_A.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_TPU98A_A.inst.cfg new file mode 100644 index 0000000000..5a2e9009be --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_TPU98A_A.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = a +weight = 1 +material = emotiontech_tpu98a +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 30 +speed_wall = =math.ceil(speed_print * 30/30) +speed_wall_0 = =math.ceil(speed_print * 25/30) +speed_topbottom = =math.ceil(speed_print * 25/30) +speed_layer_0 = =math.ceil(speed_print * 20/30) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature - 3 +material_flow = 107 +retraction_extra_prime_amount = 0.2 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.5 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_TPU98A_B.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_TPU98A_B.inst.cfg new file mode 100644 index 0000000000..46bdc28c7e --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_TPU98A_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = b +weight = 0 +material = emotiontech_tpu98a +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 35 +speed_wall = =math.ceil(speed_print * 35/35) +speed_wall_0 = =math.ceil(speed_print * 27/35) +speed_topbottom = =math.ceil(speed_print * 25/35) +speed_layer_0 = =math.ceil(speed_print * 20/35) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 103 +retraction_extra_prime_amount = 0.2 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.5 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/quality/strateo3d/HT0.4/s3d_ht0.4_TPU98A_C.inst.cfg b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_TPU98A_C.inst.cfg new file mode 100644 index 0000000000..57a47f9a3b --- /dev/null +++ b/resources/quality/strateo3d/HT0.4/s3d_ht0.4_TPU98A_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 17 +type = quality +quality_type = c +weight = -1 +material = emotiontech_tpu98a +variant = High temp 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 40/40) +speed_wall_0 = =math.ceil(speed_print * 30/40) +speed_topbottom = =math.ceil(speed_print * 27/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 7 +material_print_temperature_layer_0 = =default_material_print_temperature + 3 +material_flow = 101 +retraction_extra_prime_amount = 0.2 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.5 +support_interface_density = 100 +prime_tower_enable = True diff --git a/resources/themes/cura-dark/theme.json b/resources/themes/cura-dark/theme.json index e3266b923b..0d6fa2f260 100644 --- a/resources/themes/cura-dark/theme.json +++ b/resources/themes/cura-dark/theme.json @@ -16,13 +16,20 @@ "primary_text": [255, 255, 255, 204], "secondary": [95, 95, 95, 255], - "icon": [204, 204, 204, 255], + "secondary_button": [0, 0, 0, 0], + "secondary_button_hover": [85, 85, 87, 255], + "secondary_button_text": [255, 255, 255, 255], + + "icon": [255, 255, 255, 255], "toolbar_background": [39, 44, 48, 255], - "toolbar_button_active": [95, 95, 95, 255], - "toolbar_button_hover": [95, 95, 95, 255], - "toolbar_button_active_hover": [95, 95, 95, 255], + "toolbar_button_active": [57, 57, 58, 255], + "toolbar_button_hover": [57, 57, 58, 255], + "toolbar_button_active_hover": [57, 57, 58, 255], "main_window_header_button_text_inactive": [128, 128, 128, 255], + "main_window_header_background": [14, 14, 14, 255], + "main_window_header_background_gradient": [32, 32, 32, 255], + "main_window_header_button_background_hovered": [46, 46, 46, 255], "account_sync_state_icon": [255, 255, 255, 204], @@ -32,7 +39,7 @@ "text": [255, 255, 255, 204], "text_detail": [255, 255, 255, 172], - "text_link": [255, 255, 255, 127], + "text_link": [25, 110, 240, 255], "text_inactive": [255, 255, 255, 88], "text_hover": [255, 255, 255, 204], "text_pressed": [255, 255, 255, 204], @@ -87,8 +94,8 @@ "action_button_active": [39, 44, 48, 30], "action_button_active_text": [255, 255, 255, 255], "action_button_active_border": [255, 255, 255, 100], - "action_button_disabled": [19, 24, 28, 255], - "action_button_disabled_text": [200, 200, 200, 80], + "action_button_disabled": [85, 85, 87, 255], + "action_button_disabled_text": [103, 103, 104, 255], "action_button_disabled_border": [255, 255, 255, 30], "scrollbar_background": [39, 44, 48, 0], diff --git a/resources/themes/cura-light/icons/default/Extruder.svg b/resources/themes/cura-light/icons/default/Extruder.svg new file mode 100644 index 0000000000..7c17fa67ca --- /dev/null +++ b/resources/themes/cura-light/icons/default/Extruder.svg @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<g id="Layer_1_1_"> + <g> + <path d="M12,2C6.5,2,2,6.5,2,12v9h2v-3c1.8,2.4,4.7,4,8,4c5.5,0,10-4.5,10-10S17.5,2,12,2z M12,20c-4.4,0-8-3.6-8-8s3.6-8,8-8 + s8,3.6,8,8S16.4,20,12,20z"/> + </g> +</g> +<g id="Comments"> +</g> +</svg> diff --git a/resources/themes/cura-light/icons/default/ExtruderColor.svg b/resources/themes/cura-light/icons/default/ExtruderColor.svg new file mode 100644 index 0000000000..ff202e7296 --- /dev/null +++ b/resources/themes/cura-light/icons/default/ExtruderColor.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#231F20;} +</style> +<g id="Layer_1_1_"> + <path class="st0" d="M12,21c-5,0-9-4-9-9s4-9,9-9s9,4,9,9S17,21,12,21z M12,6c-3.3,0-6,2.7-6,6s2.7,6,6,6s6-2.7,6-6S15.3,6,12,6z" + /> +</g> +<g id="Comments"> +</g> +</svg> diff --git a/resources/themes/cura-light/icons/default/Infill100.svg b/resources/themes/cura-light/icons/default/Infill100.svg new file mode 100644 index 0000000000..d136666990 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Infill100.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> +<rect x="3" y="3" width="18" height="18" rx="3" /> +</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/default/Solid.svg b/resources/themes/cura-light/icons/default/Solid.svg index 34367b7bc7..608a56a3e3 100644 --- a/resources/themes/cura-light/icons/default/Solid.svg +++ b/resources/themes/cura-light/icons/default/Solid.svg @@ -1,10 +1,3 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="-282 405.9 30 30"> -<path d="M-280.4 407.1l-.4.4v1.8l2.2-2.2zm2.2 0l-2.6 2.6v1.8l4.4-4.4zm2.2 0l-4.8 4.8v1.8l6.6-6.6zm2.2 0l-7 6.9v1.8l8.8-8.7zm2.1 0l-9.1 9.1v1.8l10.9-10.9zm2.2 0l-11.3 11.3v1.8l13.1-13.1zm2.2 0l-13.5 13.5v1.8l15.3-15.3zm2.2 0l-15.7 15.7v1.8l17.5-17.5zm2.2 0l-17.9 17.9v1.8l19.7-19.7zm2.2 0l-20.1 20.1v1.8l21.9-21.9zm2.2 0l-22.3 22.3v1.8l24.1-24.1zm2.2 0l-24.5 24.5v1.8l26.3-26.3zM-282 435zm28.8-27.9h-.9l-26.7 26.7v.9h.9l26.7-26.7zm0 1.3l-26.3 26.3h1.8l24.5-24.5zm0 2.1l-24.1 24.2h1.8l22.3-22.4zm0 2.2l-22 22h1.8l20.2-20.2zm0 2.2l-19.8 19.8h1.8l18-18zm0 2.2l-17.6 17.6h1.8l15.8-15.8zm0 2.2l-15.4 15.4h1.8l13.6-13.6zm0 2.2l-13.2 13.2h1.8l11.4-11.4zm0 2.2l-11 11h1.8l9.2-9.2zm0 2.2l-8.8 8.8h1.8l7-7zm0 2.2l-6.6 6.6h1.8l4.8-4.8zm0 2.2l-4.4 4.4h1.8l2.6-2.6zm-2.2 4.4h1.8l.4-.4v-1.8zm-25.4-27.6h-1.2v1.6l1.2-1.2zm0 8.7l-1.2 1.2v.4l1.2-1.2zm0 6.6l-1.2 1.2v.4l1.2-1.2zm0-8.7l-1.2 1.2v.3l1.2-1.2zm0 4.3l-1.2 1.2v.4l1.2-1.2zm0-8.7l-1.2 1.2v.4l1.2-1.2zm0 2.2l-1.2 1.2v.4l1.2-1.2zm0 8.7l-1.2 1.2v.4l1.2-1.2zm0 13.6v-.4l-1.2 1.2v.1h.3zm0-4.8l-1.2 1.2v.4l1.2-1.2zm0 2.2l-1.2 1.2v.4l1.2-1.2zm0-6.6l-1.2 1.2v.4l1.2-1.2zm0 2.2l-1.2 1.2v.4l1.2-1.2z" /> -<path d="M-280.8 407.5l-1.2 1.2v1.8l1.2-1.2zm0 2.2l-1.2 1.2v1.8l1.2-1.2zm0 2.2l-1.2 1.2v1.8l1.2-1.2zm0 2.1l-1.2 1.2v1.8l1.2-1.2zm0 2.2l-1.2 1.2v1.8l1.2-1.2zm0 2.2l-1.2 1.2v1.8l1.2-1.2zm0 2.2l-1.2 1.2v1.8l1.2-1.2zm0 2.2l-1.2 1.2v1.8l1.2-1.2zm0 2.2l-1.2 1.2v1.8l1.2-1.2zm0 2.2l-1.2 1.2v1.8l1.2-1.2zm0 2.2l-1.2 1.2v1.8l1.2-1.2zm0 2.2l-1.2 1.2v1.8l1.2-1.2zm-.9 3.1h.9v-.9zm28.5-19.8l1.2-1.2v-.4l-1.2 1.2zm0 4.4l1.2-1.2v-.4l-1.2 1.2zm0-11.3v.4l1.2-1.2v-.1h-.3zm0 15.7l1.2-1.2v-.4l-1.2 1.2zm0-6.6l1.2-1.2v-.4l-1.2 1.2zm0-6.6l1.2-1.2v-.3l-1.2 1.2zm0 2.2l1.2-1.2v-.4l-1.2 1.2zm0 8.8l1.2-1.2v-.4l-1.2 1.2zm0 12.8v.4h1.2v-1.6zm0-8.4l1.2-1.2v-.4l-1.2 1.2zm0 2.2l1.2-1.2v-.4l-1.2 1.2zm0 4.4l1.2-1.2v-.4l-1.2 1.2zm0-2.2l1.2-1.2v-.4l-1.2 1.2z" /> -<path d="M-252.3 407.1h-.9v.9zm-.9 3.1l1.2-1.2v-1.8l-1.2 1.2zm0 2.1l1.2-1.2v-1.8l-1.2 1.2zm0 2.2l1.2-1.2v-1.8l-1.2 1.2zm0 2.2l1.2-1.2v-1.8l-1.2 1.2zm0 2.2l1.2-1.2v-1.8l-1.2 1.2zm0 2.2l1.2-1.2v-1.8l-1.2 1.2zm0 2.2l1.2-1.2v-1.8l-1.2 1.2zm0 2.2l1.2-1.2v-1.8l-1.2 1.2zm0 2.2l1.2-1.2v-1.8l-1.2 1.2zm0 2.2l1.2-1.2v-1.8l-1.2 1.2zm0 2.2l1.2-1.2v-1.8l-1.2 1.2zm0 2.2l1.2-1.2v-1.8l-1.2 1.2zm-10.1-27.2h.4l1.2-1.2h-2.2l.9.9zm-2.2 0h.4l1.2-1.2h-2.2l.9.9zm-4.4 0h.4l1.2-1.2h-2.2l.9.9zm13.2 0h.4l1.2-1.2h-2.2l.9.9zm2.2 0h.4l.9-.9v-.3h-1.9l.9.9zm-4.4 0h.4l1.2-1.2h-2.2l.9.9zm-2.2 0h.4l1.2-1.2h-2.2l.9.9zm-19.3 0l1.2-1.2h-1.6v1.2zm4 0h.4l1.2-1.2h-2.2l.9.9z" /> -<path d="M-278.6 407.1h.4l1.2-1.2h-2.2l.9.9zm4.4 0h.4l1.2-1.2h-2.2l.9.9zm2.2 0h.3l1.2-1.2h-2.1l.9.9zm4.3 0h.4l1.2-1.2h-2.2l.9.9z" /> -<path d="M-278.6 407.1l.3-.3-.9-.9-1.2 1.2zm2.2 0l.3-.3-.9-.9-1.2 1.2zm2.2 0l.3-.3-.9-.9-1.2 1.2zm2.2 0l.3-.3-.9-.9-1.2 1.2zm2.1 0l.3-.3-.9-.9-1.2 1.2zm2.2 0l.3-.3-.9-.9-1.2 1.2zm2.2 0l.3-.3-.9-.9-1.2 1.2zm2.2 0l.3-.3-.9-.9-1.2 1.2zm2.2 0l.3-.3-.9-.9-1.2 1.2zm2.2 0l.3-.3-.9-.9-1.2 1.2zm2.2 0l.3-.3-.9-.9-1.2 1.2zm2.2 0l.3-.3-.9-.9-1.2 1.2zm1.3-.9l-.9.9h.9zm-28.8-.3h1.2v1.2h-1.2zm29.7 1.2h.3v-1.2h-.9l.9.9zm-.6-1.2h-.3v.3z" /> -<path d="M-253.2 407.1h.9l.3-.3-.9-.9-.3.3zm-13.2 27.6h-.4l-1.2 1.2h2.2l-.9-.9zm2.2 0h-.4l-1.2 1.2h2.2l-.9-.9zm-6.6 0h-.4l-1.2 1.2h2.2l-.9-.9zm2.2 0h-.4l-1.2 1.2h2.2l-.9-.9zm15 0l-1.2 1.2h1.6v-1.2zm-4 0h-.4l-1.2 1.2h2.2l-.9-.9zm-2.2 0h-.4l-1.2 1.2h2.2l-.9-.9zm4.4 0h-.4l-1.2 1.2h2.2l-.9-.9zm-17.6 0h-.4l-1.2 1.2h2.2l-.9-.9zm11 0h-.4l-1.2 1.2h2.2l-.9-.9zm-15.3 0h-.4l-1.2 1.2h2.2l-.9-.9zm2.1 0h-.3l-1.2 1.2h2.1l-.9-.9zm-4.3 0h-.4l-.9.9v.3h1.9l-.9-.9z" /> -<path d="M-280.8 435.6l.9-.9h-.9zm1.3-.9l-.3.3.9.9 1.2-1.2zm2.2 0l-.3.3.9.9 1.2-1.2zm2.1 0l-.3.3.9.9 1.2-1.2zm2.2 0l-.3.3.9.9 1.2-1.2zm2.2 0l-.3.3.9.9 1.2-1.2zm2.2 0l-.3.3.9.9 1.2-1.2zm2.2 0l-.3.3.9.9 1.2-1.2zm2.2 0l-.3.3.9.9 1.2-1.2zm2.2 0l-.3.3.9.9 1.2-1.2zm2.2 0l-.3.3.9.9 1.2-1.2zm2.2 0l-.3.3.9.9 1.2-1.2zm2.2 0l-.3.3.9.9 1.2-1.2zm-26.6 1.2h.9l-.9-.9zm0-1.2v.3l.3-.3zm.9 1.2h.3v-.3z" /> -<path d="M-280.8 434.7h-.9l-.3.3.9.9.3-.3zm27.6 0h1.2v1.2h-1.2z" /> -</svg> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> +<rect x="0" y="0" width="24" height="24" /> +</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/low/CloudBlueBG.svg b/resources/themes/cura-light/icons/low/CloudBadge.svg index a3c092992d..e37fb324d4 100644 --- a/resources/themes/cura-light/icons/low/CloudBlueBG.svg +++ b/resources/themes/cura-light/icons/low/CloudBadge.svg @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12"> -<path fill="#196EF0" d="M6,0C2.7,0,0,2.7,0,6s2.7,6,6,6s6-2.7,6-6S9.3,0,6,0z M7,9H4C2.9,9,2,8.1,2,7s0.9-2,2-2c0.1,0,0.1,0,0.2,0 +<path d="M6,0C2.7,0,0,2.7,0,6s2.7,6,6,6s6-2.7,6-6S9.3,0,6,0z M7,9H4C2.9,9,2,8.1,2,7s0.9-2,2-2c0.1,0,0.1,0,0.2,0 C4.6,3.8,5.7,3,7,3c1.7,0,3,1.3,3,3S8.7,9,7,9z" /> </svg> diff --git a/resources/themes/cura-light/icons/low/CloudGreyBG.svg b/resources/themes/cura-light/icons/low/CloudGreyBG.svg deleted file mode 100644 index 0637dd7de9..0000000000 --- a/resources/themes/cura-light/icons/low/CloudGreyBG.svg +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12"> -<path fill="#6C6C6C" d="M6,0C2.7,0,0,2.7,0,6s2.7,6,6,6s6-2.7,6-6S9.3,0,6,0z M7,9H4C2.9,9,2,8.1,2,7s0.9-2,2-2c0.1,0,0.1,0,0.2,0 - C4.6,3.8,5.7,3,7,3c1.7,0,3,1.3,3,3S8.7,9,7,9z" /> -</svg> diff --git a/resources/themes/cura-light/icons/medium/ExtruderColor.svg b/resources/themes/cura-light/icons/medium/ExtruderColor.svg new file mode 100644 index 0000000000..cd4452b246 --- /dev/null +++ b/resources/themes/cura-light/icons/medium/ExtruderColor.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#231F20;} +</style> +<g id="Layer_1_1_"> + <path class="st0" d="M15,26C8.9,26,4,21.1,4,15S8.9,4,15,4s11,4.9,11,11S21.1,26,15,26z M15,8c-3.8,0-7,3.2-7,7s3.2,7,7,7 + s7-3.1,7-7S18.9,8,15,8z"/> +</g> +<g id="Comments"> +</g> +</svg> diff --git a/resources/themes/cura-light/icons/medium/Folder.svg b/resources/themes/cura-light/icons/medium/Folder.svg new file mode 100644 index 0000000000..8dc9b5ea9f --- /dev/null +++ b/resources/themes/cura-light/icons/medium/Folder.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve"> +<g id="Layer_1"> + <path d="M24,9c0-1.65-1.35-3-3-3h-9l-1-1H6C4.34,5,3,6.34,3,8v14c0,1.66,1.34,3,3,3h18c1.66,0,3-1.34,3-3V12C27,10.34,25.66,9,24,9 + z M25,23H5V7h5.17l4,4H25V23z"/> +</g> +<g id="Comments"> +</g> +</svg> diff --git a/resources/themes/cura-light/icons/medium/Printer.svg b/resources/themes/cura-light/icons/medium/Printer.svg new file mode 100644 index 0000000000..ef67996d48 --- /dev/null +++ b/resources/themes/cura-light/icons/medium/Printer.svg @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve"> +<g id="Layer_1"> + <g> + <path d="M24,6v18h-2l-2-2H10l-2,2H6V6H24 M26,4H4v22h4.828l2-2h8.343l2,2H26V4L26,4z"/> + <rect x="10" y="18" width="10" height="2"/> + </g> +</g> +<g id="Comments"> +</g> +</svg> diff --git a/resources/themes/cura-light/icons/medium/Sliders.svg b/resources/themes/cura-light/icons/medium/Sliders.svg new file mode 100644 index 0000000000..91bd9ae0fd --- /dev/null +++ b/resources/themes/cura-light/icons/medium/Sliders.svg @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve"> +<g id="Layer_1"> + <g> + <path d="M18,5h-2c-1.1,0-2,0.9-2,2H3v2h11c0,1.1,0.9,2,2,2h2c1.1,0,2-0.9,2-2V7C20,5.9,19.1,5,18,5z M18,9h-2V7h2V9z"/> + <rect x="21" y="7" width="6" height="2"/> + <rect x="25" y="14" width="2" height="2"/> + <path d="M22,12h-2c-1.1,0-2,0.9-2,2H3v2h15c0,1.1,0.9,2,2,2h2c1.1,0,2-0.9,2-2v-2C24,12.9,23.1,12,22,12z M22,16h-2v-2h2V16z"/> + <path d="M12,19h-2c-1.1,0-2,0.9-2,2H3v2h5c0,1.1,0.9,2,2,2h2c1.1,0,2-0.9,2-2v-2C14,19.9,13.1,19,12,19z M12,23h-2v-2h2V23z"/> + <rect x="15" y="21" width="12" height="2"/> + </g> +</g> +<g id="Comments"> +</g> +</svg> diff --git a/resources/themes/cura-light/styles.qml b/resources/themes/cura-light/styles.qml index de15866f1a..1320b54f37 100755 --- a/resources/themes/cura-light/styles.qml +++ b/resources/themes/cura-light/styles.qml @@ -252,11 +252,11 @@ QtObject anchors.centerIn: parent opacity: control.enabled ? 1.0 : 0.2 source: control.iconSource - width: UM.Theme.getSize("button_icon").width - height: UM.Theme.getSize("button_icon").height + width: UM.Theme.getSize("medium_button_icon").width + height: UM.Theme.getSize("medium_button_icon").height color: UM.Theme.getColor("icon") - sourceSize: UM.Theme.getSize("button_icon") + sourceSize: UM.Theme.getSize("medium_button_icon") } } } diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 5245d21455..93a40d645d 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -129,24 +129,44 @@ "family": "Noto Sans" }, "small": { - "size": 0.7, + "size": 0.9, "weight": 40, "family": "Noto Sans" }, "small_ja_JP": { - "size": 0.7, + "size": 0.9, "weight": 50, "family": "Noto Sans" }, "small_zh_CN": { - "size": 0.7, + "size": 0.9, "weight": 50, "family": "Noto Sans" }, "small_zh_TW": { - "size": 0.7, + "size": 0.9, "weight": 50, "family": "Noto Sans" + }, + "small_emphasis": { + "size": 0.9, + "weight": 100, + "family": "Noto Sans" + }, + "small_emphasis_ja_JP": { + "size": 0.9, + "weight": 100, + "family": "Noto Sans" + }, + "small_emphasis_zh_CN": { + "size": 0.9, + "weight": 100, + "family": "Noto Sans" + }, + "small_emphasis_zh_TW": { + "size": 0.9, + "weight": 100, + "family": "Noto Sans" } }, @@ -168,15 +188,15 @@ "icon": [8, 7, 63, 255], - "primary_button": [38, 113, 231, 255], + "primary_button": [25, 110, 240, 255], "primary_button_shadow": [27, 95, 202, 255], - "primary_button_hover": [81, 145, 247, 255], + "primary_button_hover": [16, 70, 156, 255], "primary_button_text": [255, 255, 255, 255], - "secondary_button": [240, 240, 240, 255], + "secondary_button": [255, 255, 255, 0], "secondary_button_shadow": [216, 216, 216, 255], - "secondary_button_hover": [228, 228, 228, 255], - "secondary_button_text": [30, 102, 215, 255], + "secondary_button_hover": [232, 240, 253, 255], + "secondary_button_text": [25, 110, 240, 255], "main_window_header_background": [8, 7, 63, 255], "main_window_header_background_gradient": [25, 23, 91, 255], @@ -196,7 +216,7 @@ "machine_selector_text_active": [255, 255, 255, 255], "machine_selector_printer_icon": [8, 7, 63, 255], - "action_panel_secondary": [27, 95, 202, 255], + "action_panel_secondary": [25, 110, 240, 255], "first_run_shadow": [50, 50, 50, 255], @@ -210,7 +230,7 @@ "text": [25, 25, 25, 255], "text_detail": [174, 174, 174, 128], - "text_link": [50, 130, 255, 255], + "text_link": [25, 110, 240, 255], "text_inactive": [174, 174, 174, 255], "text_pressed": [50, 130, 255, 255], "text_subtext": [0, 0, 0, 255], @@ -250,6 +270,7 @@ "button_tooltip_text": [192, 193, 194, 255], "extruder_button_material_border": [255, 255, 255, 255], + "extruder_disabled": [255, 255, 255, 102], "rating_star": [90, 90, 90, 255], @@ -266,8 +287,8 @@ "action_button_active_text": [0, 0, 0, 255], "action_button_active_border": [50, 130, 255, 255], "action_button_disabled": [245, 245, 245, 255], - "action_button_disabled_text": [127, 127, 127, 255], - "action_button_disabled_border": [245, 245, 245, 255], + "action_button_disabled_text": [196, 196, 196, 255], + "action_button_disabled_border": [196, 196, 196, 255], "action_button_shadow": [223, 223, 223, 255], "action_button_disabled_shadow": [228, 228, 228, 255], @@ -329,7 +350,7 @@ "checkbox_hover": [255, 255, 255, 255], "checkbox_border": [199, 199, 199, 255], "checkbox_border_hover": [50, 130, 255, 255], - "checkbox_mark": [50, 130, 255, 255], + "checkbox_mark": [35, 35, 35, 255], "checkbox_disabled": [223, 223, 223, 255], "checkbox_text": [35, 35, 35, 255], @@ -416,7 +437,7 @@ "monitor_icon_accent": [255, 255, 255, 255], "monitor_icon_disabled": [238, 238, 238, 255], - "monitor_secondary_button_hover": [228, 228, 228, 255], + "monitor_secondary_button_hover": [232, 242, 252, 255], "monitor_secondary_button": [240, 240, 240, 255], "monitor_secondary_button_text": [30, 102, 215, 255], "monitor_secondary_button_shadow": [216, 216, 216, 255], @@ -445,7 +466,8 @@ "monitor_carousel_dot": [216, 216, 216, 255], "monitor_carousel_dot_current": [119, 119, 119, 255], - "cloud_unavailable": [153, 153, 153, 255] + "cloud_unavailable": [153, 153, 153, 255], + "connection_badge_background": [255, 255, 255, 255] }, "sizes": { @@ -482,9 +504,9 @@ "machine_selector_widget": [20.0, 4.0], "machine_selector_widget_content": [25.0, 32.0], - "machine_selector_icon": [2.66, 2.66], + "machine_selector_icon": [2.5, 2.5], - "views_selector": [23.0, 4.0], + "views_selector": [16.0, 4.0], "printer_type_label": [3.5, 1.5], @@ -503,12 +525,12 @@ "thin_margin": [0.71, 0.71], "narrow_margin": [0.5, 0.5], - "extruder_icon": [2.33, 2.33], + "extruder_icon": [2.5, 2.5], "section": [0.0, 2], "section_control": [0, 1], - "section_icon": [1.6, 1.6], - "section_icon_column": [2.8, 0.0], + "section_icon": [2, 2], + "section_icon_column": [2.5, 2.5], "rating_star": [1.0, 1.0], "setting": [25.0, 1.8], @@ -537,6 +559,9 @@ "small_button": [2, 2], "small_button_icon": [1.5, 1.5], + "medium_button": [2.5, 2.5], + "medium_button_icon": [2, 2], + "favorites_row": [2, 2], "favorites_button": [2, 2], "favorites_button_icon": [1.2, 1.2], @@ -589,7 +614,7 @@ "message": [30.0, 5.0], "message_close": [1, 1], "message_radius": [0.25, 0.25], - "message_action_button": [0, 2.0], + "message_action_button": [0, 2.5], "message_image": [15.0, 5.0], "infill_button_margin": [0.5, 0.5], diff --git a/resources/variants/strateo3d_high_temp_04.inst.cfg b/resources/variants/strateo3d_high_temp_04.inst.cfg new file mode 100644 index 0000000000..bb51ab03cc --- /dev/null +++ b/resources/variants/strateo3d_high_temp_04.inst.cfg @@ -0,0 +1,20 @@ +[general] +name = High temp 0.4 +version = 4 +definition = strateo3d + +[metadata] +setting_version = 17 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_id = HT0.4 +machine_nozzle_size = 0.4 +machine_nozzle_tip_outer_diameter = 1.0 +layer_height = 0.2 +layer_height_0 = 0.3 +prime_tower_enable = True +retract_at_layer_change = False +support_angle = 45 +support_use_towers = True |