Merge branch 'master' into libArachne_rebased

This commit is contained in:
Remco Burema 2021-07-16 08:49:46 +02:00
commit 6c08bbfc9d
No known key found for this signature in database
GPG key ID: 215C49431D43F98C
122 changed files with 2907 additions and 524 deletions

View file

@ -215,7 +215,7 @@ class ExtrudersModel(ListModel):
"id": "",
"name": catalog.i18nc("@menuitem", "Not overridden"),
"enabled": True,
"color": "#ffffff",
"color": "transparent",
"index": -1,
"definition": "",
"material": "",

View file

@ -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,10 +32,11 @@ 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]]]
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
@ -56,6 +59,8 @@ class TextManager(QObject):
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 = ""

View file

@ -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"""

View file

@ -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>

After

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -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,24 +31,35 @@ Item
margins: UM.Theme.getSize("default_margin").width
}
Label
RowLayout
{
id: selectProjectLabel
id: headerRow
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
anchors
{
top: parent.top
left: parent.left
right: parent.right
}
height: childrenRect.height
spacing: UM.Theme.getSize("default_margin").width
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"
}
Cura.SecondaryButton
{
id: createNewProjectButton
anchors.verticalCenter: selectProjectLabel.verticalCenter
anchors.right: parent.right
text: "New Library project"
onClicked:
@ -55,6 +68,7 @@ Item
}
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

View file

@ -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,

View file

@ -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()

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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):

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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 enabled: 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
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
hoverEnabled: true
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,20 +30,13 @@ 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
{
id: clickArea
anchors.fill: parent
hoverEnabled: base.enabled
onClicked:
{
if (base.enabled)
{
if (OutputDevice.activeCameraUrl != "")
{
@ -51,6 +47,4 @@ Rectangle
OutputDevice.setActiveCameraUrl(modelData.cameraUrl)
}
}
}
}
}

View file

@ -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

View file

@ -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
}
}

View file

@ -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
}

View file

@ -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"):

View file

@ -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")
)

View file

@ -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 }
}
}

View file

@ -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"
}
}
}

View file

@ -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"
}
}
}

View file

@ -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}
}
}

View file

@ -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,

View file

@ -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 },

View file

@ -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}
}
}

View file

@ -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"
}
}
}

View file

@ -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}
}
}

View file

@ -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}
}
}

View file

@ -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" },

View file

@ -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}
}
}

View file

@ -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 }

View file

@ -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 }
}
}

View file

@ -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 }
}
}

View file

@ -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 }
}
}

View file

@ -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 }
}
}

View file

@ -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"

Binary file not shown.

View file

@ -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
}

View file

@ -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

View file

@ -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

View file

@ -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")
}
}
}

View file

@ -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
}
}
}
}

View file

@ -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));

View file

@ -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.

View file

@ -22,6 +22,7 @@ Cura.ToolbarButton
{
materialColor: extruder.color
extruderEnabled: extruder.stack.isEnabled
iconVariant: "default"
property int index: extruder.index
}

View file

@ -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"
Item
{
opacity: extruderEnabled ? 1 : UM.Theme.getColor("extruder_disabled").a
anchors.fill: parent
UM.RecolorImage
{
anchors.fill: parent
sourceSize: mainIcon.sourceSize
source: UM.Theme.getIcon("ExtruderColor", iconVariant)
color: materialColor
}
UM.RecolorImage
{
id: mainIcon
anchors.fill: parent
sourceSize: UM.Theme.getSize("extruder_icon")
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")
anchors
{
horizontalCenter: parent.horizontalCenter
top: parent.top
topMargin: (parent.height - height) / 2
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")
}
}
}

View file

@ -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"

View file

@ -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
}
}
}

View file

@ -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
{

View file

@ -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 != ""
}

View file

@ -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"

View file

@ -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:

View file

@ -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.")

View file

@ -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
{

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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
}
}

View file

@ -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
}

View file

@ -146,6 +146,7 @@ Item
}
radius: Math.round(width / 2)
color: activeColor
border.color: defaultItemColor
visible: checkbox.checked
}
}

View file

@ -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")

View file

@ -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:

View file

@ -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
}
}

View file

@ -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:

View file

@ -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
}
}

View file

@ -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")

View file

@ -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"

View file

@ -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:

View file

@ -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
}

View file

@ -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

View file

@ -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
}
}
}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

Some files were not shown because too many files have changed in this diff Show more