diff --git a/.gitignore b/.gitignore index 5a077bd6b2..570c932d28 100644 --- a/.gitignore +++ b/.gitignore @@ -42,6 +42,7 @@ plugins/FlatProfileExporter plugins/ProfileFlattener plugins/cura-god-mode-plugin plugins/cura-big-flame-graph +plugins/cura-siemensnx-plugin #Build stuff CMakeCache.txt diff --git a/cura.desktop.in b/cura.desktop.in index 782167b5fc..778e1d5033 100644 --- a/cura.desktop.in +++ b/cura.desktop.in @@ -10,6 +10,6 @@ TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura Icon=cura-icon Terminal=false Type=Application -MimeType=application/sla;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png; +MimeType=application/sla;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;model/x3d+xml; Categories=Graphics; Keywords=3D;Printing; diff --git a/cura/CameraAnimation.py b/cura/CameraAnimation.py index 1d91613edf..37f230a30d 100644 --- a/cura/CameraAnimation.py +++ b/cura/CameraAnimation.py @@ -12,8 +12,8 @@ class CameraAnimation(QVariantAnimation): def __init__(self, parent = None): super().__init__(parent) self._camera_tool = None - self.setDuration(500) - self.setEasingCurve(QEasingCurve.InOutQuad) + self.setDuration(300) + self.setEasingCurve(QEasingCurve.OutQuad) def setCameraTool(self, camera_tool): self._camera_tool = camera_tool diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py index 7008ba64d2..c6f94f0a80 100644 --- a/cura/CrashHandler.py +++ b/cura/CrashHandler.py @@ -1,18 +1,28 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + import sys import platform import traceback -import webbrowser import faulthandler import tempfile import os -import urllib +import os.path +import time +import json +import ssl +import urllib.request +import urllib.error -from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, Qt, QCoreApplication -from PyQt5.QtGui import QPixmap -from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QHBoxLayout, QVBoxLayout, QLabel, QTextEdit +from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QCoreApplication +from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit, QGroupBox +from UM.Application import Application from UM.Logger import Logger +from UM.View.GL.OpenGL import OpenGL from UM.i18n import i18nCatalog +from UM.Platform import Platform + catalog = i18nCatalog("cura") MYPY = False @@ -35,83 +45,240 @@ fatal_exception_types = [ SystemError, ] -def show(exception_type, value, tb): - Logger.log("c", "An uncaught exception has occurred!") - for line in traceback.format_exception(exception_type, value, tb): - for part in line.rstrip("\n").split("\n"): - Logger.log("c", part) - if not CuraDebugMode and exception_type not in fatal_exception_types: - return +class CrashHandler: + crash_url = "https://stats.ultimaker.com/api/cura" - application = QCoreApplication.instance() - if not application: - sys.exit(1) + def __init__(self, exception_type, value, tb): + self.exception_type = exception_type + self.value = value + self.traceback = tb + self.dialog = QDialog() - dialog = QDialog() - dialog.setMinimumWidth(640) - dialog.setMinimumHeight(640) - dialog.setWindowTitle(catalog.i18nc("@title:window", "Crash Report")) + # While we create the GUI, the information will be stored for sending afterwards + self.data = dict() + self.data["time_stamp"] = time.time() - layout = QVBoxLayout(dialog) + Logger.log("c", "An uncaught exception has occurred!") + for line in traceback.format_exception(exception_type, value, tb): + for part in line.rstrip("\n").split("\n"): + Logger.log("c", part) - #label = QLabel(dialog) - #pixmap = QPixmap() - #try: - # data = urllib.request.urlopen("http://www.randomkittengenerator.com/cats/rotator.php").read() - # pixmap.loadFromData(data) - #except: - # try: - # from UM.Resources import Resources - # path = Resources.getPath(Resources.Images, "kitten.jpg") - # pixmap.load(path) - # except: - # pass - #pixmap = pixmap.scaled(150, 150) - #label.setPixmap(pixmap) - #label.setAlignment(Qt.AlignCenter) - #layout.addWidget(label) + if not CuraDebugMode and exception_type not in fatal_exception_types: + return - label = QLabel(dialog) - layout.addWidget(label) + application = QCoreApplication.instance() + if not application: + sys.exit(1) - #label.setScaledContents(True) - label.setText(catalog.i18nc("@label", """

A fatal exception has occurred that we could not recover from!

-

Please use the information below to post a bug report at http://github.com/Ultimaker/Cura/issues

- """)) + self._createDialog() - textarea = QTextEdit(dialog) - layout.addWidget(textarea) + ## Creates a modal dialog. + def _createDialog(self): + self.dialog.setMinimumWidth(640) + self.dialog.setMinimumHeight(640) + self.dialog.setWindowTitle(catalog.i18nc("@title:window", "Crash Report")) - try: - from UM.Application import Application - version = Application.getInstance().getVersion() - except: - version = "Unknown" + layout = QVBoxLayout(self.dialog) - trace = "".join(traceback.format_exception(exception_type, value, tb)) + layout.addWidget(self._messageWidget()) + layout.addWidget(self._informationWidget()) + layout.addWidget(self._exceptionInfoWidget()) + layout.addWidget(self._logInfoWidget()) + layout.addWidget(self._userDescriptionWidget()) + layout.addWidget(self._buttonsWidget()) - crash_info = "Version: {0}\nPlatform: {1}\nQt: {2}\nPyQt: {3}\n\nException:\n{4}" - crash_info = crash_info.format(version, platform.platform(), QT_VERSION_STR, PYQT_VERSION_STR, trace) + def _messageWidget(self): + label = QLabel() + label.setText(catalog.i18nc("@label crash message", """

A fatal exception has occurred. Please send us this Crash Report to fix the problem

+

Please use the "Send report" button to post a bug report automatically to our servers

+ """)) - tmp_file_fd, tmp_file_path = tempfile.mkstemp(prefix = "cura-crash", text = True) - os.close(tmp_file_fd) - with open(tmp_file_path, "w") as f: - faulthandler.dump_traceback(f, all_threads=True) - with open(tmp_file_path, "r") as f: - data = f.read() + return label - msg = "-------------------------\n" - msg += data - crash_info += "\n\n" + msg + def _informationWidget(self): + group = QGroupBox() + group.setTitle(catalog.i18nc("@title:groupbox", "System information")) + layout = QVBoxLayout() + label = QLabel() - textarea.setText(crash_info) + try: + from UM.Application import Application + self.cura_version = Application.getInstance().getVersion() + except: + self.cura_version = catalog.i18nc("@label unknown version of Cura", "Unknown") - buttons = QDialogButtonBox(QDialogButtonBox.Close, dialog) - layout.addWidget(buttons) - buttons.addButton(catalog.i18nc("@action:button", "Open Web Page"), QDialogButtonBox.HelpRole) - buttons.rejected.connect(dialog.close) - buttons.helpRequested.connect(lambda: webbrowser.open("http://github.com/Ultimaker/Cura/issues")) + crash_info = catalog.i18nc("@label Cura version", "Cura version: {version}
").format(version = self.cura_version) + crash_info += catalog.i18nc("@label Platform", "Platform: {platform}
").format(platform = platform.platform()) + crash_info += catalog.i18nc("@label Qt version", "Qt version: {qt}
").format(qt = QT_VERSION_STR) + crash_info += catalog.i18nc("@label PyQt version", "PyQt version: {pyqt}
").format(pyqt = PYQT_VERSION_STR) + crash_info += catalog.i18nc("@label OpenGL", "OpenGL: {opengl}
").format(opengl = self._getOpenGLInfo()) + label.setText(crash_info) - dialog.exec_() - sys.exit(1) + layout.addWidget(label) + group.setLayout(layout) + + self.data["cura_version"] = self.cura_version + self.data["os"] = {"type": platform.system(), "version": platform.version()} + self.data["qt_version"] = QT_VERSION_STR + self.data["pyqt_version"] = PYQT_VERSION_STR + + return group + + def _getOpenGLInfo(self): + info = "" + + self.data["opengl"] = {"version": OpenGL.getInstance().getOpenGLVersion(), "vendor": OpenGL.getInstance().getGPUVendorName(), "type": OpenGL.getInstance().getGPUType()} + + return info + + def _exceptionInfoWidget(self): + group = QGroupBox() + group.setTitle(catalog.i18nc("@title:groupbox", "Exception traceback")) + layout = QVBoxLayout() + + text_area = QTextEdit() + trace_dict = traceback.format_exception(self.exception_type, self.value, self.traceback) + trace = "".join(trace_dict) + text_area.setText(trace) + text_area.setReadOnly(True) + + layout.addWidget(text_area) + group.setLayout(layout) + + # Parsing all the information to fill the dictionary + summary = trace_dict[len(trace_dict)-1].rstrip("\n") + module = trace_dict[len(trace_dict)-2].rstrip("\n").split("\n") + module_split = module[0].split(", ") + filepath = module_split[0].split("\"")[1] + directory, filename = os.path.split(filepath) + line = int(module_split[1].lstrip("line ")) + function = module_split[2].lstrip("in ") + code = module[1].lstrip(" ") + + # Using this workaround for a cross-platform path splitting + split_path = [] + folder_name = "" + # Split until reach folder "cura" + while folder_name != "cura": + directory, folder_name = os.path.split(directory) + if not folder_name: + break + split_path.append(folder_name) + + # Look for plugins. If it's not a plugin, the current cura version is set + isPlugin = False + module_version = self.cura_version + module_name = "Cura" + if split_path.__contains__("plugins"): + isPlugin = True + # Look backwards until plugin.json is found + directory, name = os.path.split(filepath) + while not os.listdir(directory).__contains__("plugin.json"): + directory, name = os.path.split(directory) + + json_metadata_file = os.path.join(directory, "plugin.json") + try: + with open(json_metadata_file, "r") as f: + try: + metadata = json.loads(f.read()) + module_version = metadata["version"] + module_name = metadata["name"] + except json.decoder.JSONDecodeError: + # Not throw new exceptions + Logger.logException("e", "Failed to parse plugin.json for plugin %s", name) + except: + # Not throw new exceptions + pass + + exception_dict = dict() + exception_dict["traceback"] = {"summary": summary, "full_trace": trace} + exception_dict["location"] = {"path": filepath, "file": filename, "function": function, "code": code, "line": line, + "module_name": module_name, "version": module_version, "is_plugin": isPlugin} + self.data["exception"] = exception_dict + + return group + + def _logInfoWidget(self): + group = QGroupBox() + group.setTitle(catalog.i18nc("@title:groupbox", "Logs")) + layout = QVBoxLayout() + + text_area = QTextEdit() + tmp_file_fd, tmp_file_path = tempfile.mkstemp(prefix = "cura-crash", text = True) + os.close(tmp_file_fd) + with open(tmp_file_path, "w") as f: + faulthandler.dump_traceback(f, all_threads=True) + with open(tmp_file_path, "r") as f: + logdata = f.read() + + text_area.setText(logdata) + text_area.setReadOnly(True) + + layout.addWidget(text_area) + group.setLayout(layout) + + self.data["log"] = logdata + + return group + + def _userDescriptionWidget(self): + group = QGroupBox() + group.setTitle(catalog.i18nc("@title:groupbox", "User description")) + layout = QVBoxLayout() + + # When sending the report, the user comments will be collected + self.user_description_text_area = QTextEdit() + self.user_description_text_area.setFocus(True) + + layout.addWidget(self.user_description_text_area) + group.setLayout(layout) + + return group + + def _buttonsWidget(self): + buttons = QDialogButtonBox() + buttons.addButton(QDialogButtonBox.Close) + buttons.addButton(catalog.i18nc("@action:button", "Send report"), QDialogButtonBox.AcceptRole) + buttons.rejected.connect(self.dialog.close) + buttons.accepted.connect(self._sendCrashReport) + + return buttons + + def _sendCrashReport(self): + # Before sending data, the user comments are stored + self.data["user_info"] = self.user_description_text_area.toPlainText() + + # Convert data to bytes + binary_data = json.dumps(self.data).encode("utf-8") + + # Submit data + kwoptions = {"data": binary_data, "timeout": 5} + + if Platform.isOSX(): + kwoptions["context"] = ssl._create_unverified_context() + + Logger.log("i", "Sending crash report info to [%s]...", self.crash_url) + + try: + f = urllib.request.urlopen(self.crash_url, **kwoptions) + Logger.log("i", "Sent crash report info.") + f.close() + except urllib.error.HTTPError: + Logger.logException("e", "An HTTP error occurred while trying to send crash report") + except Exception: # We don't want any exception to cause problems + Logger.logException("e", "An exception occurred while trying to send crash report") + + os._exit(1) + + def show(self): + # must run the GUI code on the Qt thread, otherwise the widgets on the dialog won't react correctly. + Application.getInstance().callLater(self._show) + + def _show(self): + self.dialog.exec_() + os._exit(1) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index fc7edb8714..96ca15741e 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -51,6 +51,7 @@ from cura.Settings.MaterialsModel import MaterialsModel from cura.Settings.QualityAndUserProfilesModel import QualityAndUserProfilesModel from cura.Settings.SettingInheritanceManager import SettingInheritanceManager from cura.Settings.UserProfilesModel import UserProfilesModel +from cura.Settings.SimpleModeSettingsManager import SimpleModeSettingsManager from . import PlatformPhysics from . import BuildVolume @@ -104,7 +105,7 @@ class CuraApplication(QtApplication): # SettingVersion represents the set of settings available in the machine/extruder definitions. # You need to make sure that this version number needs to be increased if there is any non-backwards-compatible # changes of the settings. - SettingVersion = 3 + SettingVersion = 4 class ResourceTypes: QmlFiles = Resources.UserType + 1 @@ -125,6 +126,8 @@ class CuraApplication(QtApplication): # Cura will always show the Add Machine Dialog upon start. stacksValidationFinished = pyqtSignal() # Emitted whenever a validation is finished + projectFileLoaded = pyqtSignal(str) # Emitted whenever a project file is loaded + def __init__(self): # this list of dir names will be used by UM to detect an old cura directory for dir_name in ["extruders", "machine_instances", "materials", "plugins", "quality", "user", "variants"]: @@ -199,6 +202,7 @@ class CuraApplication(QtApplication): self._machine_manager = None # This is initialized on demand. self._material_manager = None self._setting_inheritance_manager = None + self._simple_mode_settings_manager = None self._additional_components = {} # Components to add to certain areas in the interface @@ -211,6 +215,7 @@ class CuraApplication(QtApplication): self.setRequiredPlugins([ "CuraEngineBackend", + "UserAgreement", "SolidView", "LayerView", "STLReader", @@ -266,8 +271,9 @@ class CuraApplication(QtApplication): empty_quality_container = copy.deepcopy(empty_container) empty_quality_container._id = "empty_quality" empty_quality_container.setName("Not Supported") - empty_quality_container.addMetaDataEntry("quality_type", "normal") + empty_quality_container.addMetaDataEntry("quality_type", "not_supported") empty_quality_container.addMetaDataEntry("type", "quality") + empty_quality_container.addMetaDataEntry("supported", False) ContainerRegistry.getInstance().addContainer(empty_quality_container) empty_quality_changes_container = copy.deepcopy(empty_container) empty_quality_changes_container._id = "empty_quality_changes" @@ -299,6 +305,8 @@ class CuraApplication(QtApplication): preferences.addPreference("view/invert_zoom", False) + self._need_to_show_user_agreement = not Preferences.getInstance().getValue("general/accepted_user_agreement") + for key in [ "dialog_load_path", # dialog_save_path is in LocalFileOutputDevicePlugin "dialog_profile_path", @@ -371,6 +379,14 @@ class CuraApplication(QtApplication): def _onEngineCreated(self): self._engine.addImageProvider("camera", CameraImageProvider.CameraImageProvider()) + @pyqtProperty(bool) + def needToShowUserAgreement(self): + return self._need_to_show_user_agreement + + + def setNeedToShowUserAgreement(self, set_value = True): + self._need_to_show_user_agreement = set_value + ## The "Quit" button click event handler. @pyqtSlot() def closeApplication(self): @@ -389,6 +405,7 @@ class CuraApplication(QtApplication): showDiscardOrKeepProfileChanges = pyqtSignal() def discardOrKeepProfileChanges(self): + has_user_interaction = False choice = Preferences.getInstance().getValue("cura/choice_on_profile_override") if choice == "always_discard": # don't show dialog and DISCARD the profile @@ -399,6 +416,10 @@ class CuraApplication(QtApplication): else: # ALWAYS ask whether to keep or discard the profile self.showDiscardOrKeepProfileChanges.emit() + has_user_interaction = True + return has_user_interaction + + onDiscardOrKeepProfileChangesClosed = pyqtSignal() # Used to notify other managers that the dialog was closed @pyqtSlot(str) def discardOrKeepProfileChangesClosed(self, option): @@ -406,9 +427,25 @@ class CuraApplication(QtApplication): global_stack = self.getGlobalContainerStack() for extruder in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()): extruder.getTop().clear() - global_stack.getTop().clear() + # if the user decided to keep settings then the user settings should be re-calculated and validated for errors + # before slicing. To ensure that slicer uses right settings values + elif option == "keep": + global_stack = self.getGlobalContainerStack() + for extruder in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()): + user_extruder_container = extruder.getTop() + if user_extruder_container: + user_extruder_container.update() + + user_global_container = global_stack.getTop() + if user_global_container: + user_global_container.update() + + # notify listeners that quality has changed (after user selected discard or keep) + self.onDiscardOrKeepProfileChangesClosed.emit() + self.getMachineManager().activeQualityChanged.emit() + @pyqtSlot(int) def messageBoxClosed(self, button): if self._message_box_callback: @@ -525,6 +562,7 @@ class CuraApplication(QtApplication): super().addCommandLineOptions(parser) parser.add_argument("file", nargs="*", help="Files to load after starting the application.") parser.add_argument("--single-instance", action="store_true", default=False) + parser.add_argument("--headless", action = "store_true", default=False) # Set up a local socket server which listener which coordinates single instances Curas and accepts commands. def _setUpSingleInstanceServer(self): @@ -666,18 +704,23 @@ class CuraApplication(QtApplication): qmlRegisterSingletonType(MachineManager, "Cura", 1, 0, "MachineManager", self.getMachineManager) qmlRegisterSingletonType(MaterialManager, "Cura", 1, 0, "MaterialManager", self.getMaterialManager) qmlRegisterSingletonType(SettingInheritanceManager, "Cura", 1, 0, "SettingInheritanceManager", - self.getSettingInheritanceManager) + self.getSettingInheritanceManager) + qmlRegisterSingletonType(SimpleModeSettingsManager, "Cura", 1, 2, "SimpleModeSettingsManager", + self.getSimpleModeSettingsManager) qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, "MachineActionManager", self.getMachineActionManager) self.setMainQml(Resources.getPath(self.ResourceTypes.QmlFiles, "Cura.qml")) self._qml_import_paths.append(Resources.getPath(self.ResourceTypes.QmlFiles)) - self.initializeEngine() - if self._engine.rootObjects: + run_headless = self.getCommandLineOption("headless", False) + if not run_headless: + self.initializeEngine() + + if run_headless or self._engine.rootObjects: self.closeSplash() - for file in self.getCommandLineOption("file", []): - self._openFile(file) + for file_name in self.getCommandLineOption("file", []): + self._openFile(file_name) for file_name in self._open_file_queue: #Open all the files that were queued up while plug-ins were loading. self._openFile(file_name) @@ -706,6 +749,11 @@ class CuraApplication(QtApplication): def getMachineActionManager(self, *args): return self._machine_action_manager + def getSimpleModeSettingsManager(self, *args): + if self._simple_mode_settings_manager is None: + self._simple_mode_settings_manager = SimpleModeSettingsManager() + return self._simple_mode_settings_manager + ## Handle Qt events def event(self, event): if event.type() == QEvent.FileOpen: @@ -1219,6 +1267,9 @@ class CuraApplication(QtApplication): # see GroupDecorator._onChildrenChanged def _createSplashScreen(self): + run_headless = self.getCommandLineOption("headless", False) + if run_headless: + return None return CuraSplashScreen.CuraSplashScreen() def _onActiveMachineChanged(self): diff --git a/cura/CuraSplashScreen.py b/cura/CuraSplashScreen.py index f6ce703fa8..77c9ad1427 100644 --- a/cura/CuraSplashScreen.py +++ b/cura/CuraSplashScreen.py @@ -62,7 +62,7 @@ class CuraSplashScreen(QSplashScreen): painter.setFont(font) painter.drawText(215, 66, 330 * self._scale, 230 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[0]) if len(version) > 1: - font.setPointSize(12) + font.setPixelSize(16) painter.setFont(font) painter.setPen(QColor(200, 200, 200, 255)) painter.drawText(247, 105, 330 * self._scale, 255 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[1]) diff --git a/cura/PreviewPass.py b/cura/PreviewPass.py new file mode 100644 index 0000000000..c1880e82ef --- /dev/null +++ b/cura/PreviewPass.py @@ -0,0 +1,57 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Uranium is released under the terms of the LGPLv3 or higher. + +from UM.Application import Application +from UM.Resources import Resources + +from UM.View.RenderPass import RenderPass +from UM.View.GL.OpenGL import OpenGL +from UM.View.RenderBatch import RenderBatch + + +from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator + +from typing import Optional + +MYPY = False +if MYPY: + from UM.Scene.Camera import Camera + +## A render pass subclass that renders slicable objects with default parameters. +# It uses the active camera by default, but it can be overridden to use a different camera. +# +# This is useful to get a preview image of a scene taken from a different location as the active camera. +class PreviewPass(RenderPass): + def __init__(self, width: int, height: int): + super().__init__("preview", width, height, 0) + + self._camera = None # type: Optional[Camera] + + self._renderer = Application.getInstance().getRenderer() + + self._shader = None + self._scene = Application.getInstance().getController().getScene() + + # Set the camera to be used by this render pass + # if it's None, the active camera is used + def setCamera(self, camera: Optional["Camera"]): + self._camera = camera + + def render(self) -> None: + if not self._shader: + self._shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "object.shader")) + + # Create a new batch to be rendered + batch = RenderBatch(self._shader) + + # Fill up the batch with objects that can be sliced. ` + for node in DepthFirstIterator(self._scene.getRoot()): + if node.callDecoration("isSliceable") and node.getMeshData() and node.isVisible(): + batch.addItem(node.getWorldTransformation(), node.getMeshData()) + + self.bind() + if self._camera is None: + batch.render(Application.getInstance().getController().getScene().getActiveCamera()) + else: + batch.render(self._camera) + self.release() diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index 80abd0c356..d3bcc10781 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -56,6 +56,7 @@ class PrintInformation(QObject): self._material_lengths = [] self._material_weights = [] self._material_costs = [] + self._material_names = [] self._pre_sliced = False @@ -66,10 +67,11 @@ class PrintInformation(QObject): self._base_name = "" self._abbr_machine = "" self._job_name = "" + self._project_name = "" Application.getInstance().globalContainerStackChanged.connect(self._updateJobName) Application.getInstance().fileLoaded.connect(self.setBaseName) - + Application.getInstance().projectFileLoaded.connect(self.setProjectName) Preferences.getInstance().preferenceChanged.connect(self._onPreferencesChanged) self._active_material_container = None @@ -78,7 +80,6 @@ class PrintInformation(QObject): self._material_amounts = [] - # Crate cura message translations and using translation keys initialize empty time Duration object for total time # and time for each feature def initializeCuraMessagePrintTimeProperties(self): @@ -139,6 +140,12 @@ class PrintInformation(QObject): def materialCosts(self): return self._material_costs + materialNamesChanged = pyqtSignal() + + @pyqtProperty("QVariantList", notify = materialNamesChanged) + def materialNames(self): + return self._material_names + def _onPrintDurationMessage(self, print_time, material_amounts): self._updateTotalPrintTimePerFeature(print_time) @@ -170,6 +177,7 @@ class PrintInformation(QObject): self._material_lengths = [] self._material_weights = [] self._material_costs = [] + self._material_names = [] material_preference_values = json.loads(Preferences.getInstance().getValue("cura/material_settings")) @@ -188,8 +196,10 @@ class PrintInformation(QObject): weight = float(amount) * float(density) / 1000 cost = 0 + material_name = catalog.i18nc("@label unknown material", "Unknown") if material: material_guid = material.getMetaDataEntry("GUID") + material_name = material.getName() if material_guid in material_preference_values: material_values = material_preference_values[material_guid] @@ -208,10 +218,12 @@ class PrintInformation(QObject): self._material_weights.append(weight) self._material_lengths.append(length) self._material_costs.append(cost) + self._material_names.append(material_name) self.materialLengthsChanged.emit() self.materialWeightsChanged.emit() self.materialCostsChanged.emit() + self.materialNamesChanged.emit() def _onPreferencesChanged(self, preference): if preference != "cura/material_settings": @@ -241,6 +253,11 @@ class PrintInformation(QObject): self._job_name = name self.jobNameChanged.emit() + @pyqtSlot(str) + def setProjectName(self, name): + self._project_name = name + self.setJobName(name) + jobNameChanged = pyqtSignal() @pyqtProperty(str, notify = jobNameChanged) @@ -248,6 +265,11 @@ class PrintInformation(QObject): return self._job_name def _updateJobName(self): + # if the project name is set, we use the project name as the job name, so the job name should not get updated + # if a model file is loaded after that. + if self._project_name != "": + return + if self._base_name == "": self._job_name = "" self.jobNameChanged.emit() @@ -303,7 +325,12 @@ class PrintInformation(QObject): elif word.isdigit(): abbr_machine += word else: - abbr_machine += self._stripAccents(word.strip("()[]{}#").upper())[0] + stripped_word = self._stripAccents(word.strip("()[]{}#").upper()) + # - use only the first character if the word is too long (> 3 characters) + # - use the whole word if it's not too long (<= 3 characters) + if len(stripped_word) > 3: + stripped_word = stripped_word[0] + abbr_machine += stripped_word self._abbr_machine = abbr_machine @@ -329,4 +356,3 @@ class PrintInformation(QObject): temp_material_amounts = [0] self._onPrintDurationMessage(temp_message, temp_material_amounts) - diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py index c6e98257ba..837ecc97c6 100644 --- a/cura/PrinterOutputDevice.py +++ b/cura/PrinterOutputDevice.py @@ -74,6 +74,7 @@ class PrinterOutputDevice(QObject, OutputDevice): self._can_pause = True self._can_abort = True self._can_pre_heat_bed = True + self._can_control_manually = True def requestWrite(self, nodes, file_name = None, filter_by_machine = False, file_handler = None): raise NotImplementedError("requestWrite needs to be implemented") @@ -144,6 +145,11 @@ class PrinterOutputDevice(QObject, OutputDevice): def canAbort(self): return self._can_abort + # Does the printer support manual control at all + @pyqtProperty(bool, constant=True) + def canControlManually(self): + return self._can_control_manually + @pyqtProperty(QObject, constant=True) def monitorItem(self): # Note that we specifically only check if the monitor component is created. diff --git a/cura/QualityManager.py b/cura/QualityManager.py index b6d47d919b..abd14fa841 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -87,7 +87,7 @@ class QualityManager: qualities = set(quality_type_dict.values()) for material_container in material_containers[1:]: next_quality_type_dict = self.__fetchQualityTypeDictForMaterial(machine_definition, material_container) - qualities.update(set(next_quality_type_dict.values())) + qualities.intersection_update(set(next_quality_type_dict.values())) return list(qualities) @@ -178,12 +178,25 @@ class QualityManager: def findAllUsableQualitiesForMachineAndExtruders(self, global_container_stack: "GlobalStack", extruder_stacks: List["ExtruderStack"]) -> List[InstanceContainer]: global_machine_definition = global_container_stack.getBottom() + machine_manager = Application.getInstance().getMachineManager() + active_stack_id = machine_manager.activeStackId + + materials = [] + + # TODO: fix this if extruder_stacks: - # Multi-extruder machine detected. - materials = [stack.material for stack in extruder_stacks] + # Multi-extruder machine detected + for stack in extruder_stacks: + if stack.getId() == active_stack_id and machine_manager.newMaterial: + materials.append(machine_manager.newMaterial) + else: + materials.append(stack.material) else: - # Machine with one extruder. - materials = [global_container_stack.material] + # Machine with one extruder + if global_container_stack.getId() == active_stack_id and machine_manager.newMaterial: + materials.append(machine_manager.newMaterial) + else: + materials.append(global_container_stack.material) quality_types = self.findAllQualityTypesForMachineAndMaterials(global_machine_definition, materials) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 12f27e8156..e623bd860b 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -303,6 +303,9 @@ class CuraContainerRegistry(ContainerRegistry): if "material" in quality_type_criteria: materials = ContainerRegistry.getInstance().findInstanceContainers(id = quality_type_criteria["material"]) del quality_type_criteria["material"] + # Do not filter quality containers here with materials because we are trying to import a profile, so it should + # NOT be restricted by the active materials on the current machine. + materials = None # Check to make sure the imported profile actually makes sense in context of the current configuration. # This prevents issues where importing a "draft" profile for a machine without "draft" qualities would report as diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 9e17ce028d..c8daca7f92 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -16,6 +16,7 @@ from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.SettingFunction import SettingFunction from UM.Settings.ContainerStack import ContainerStack from UM.Settings.Interfaces import DefinitionContainerInterface +from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext from typing import Optional, List, TYPE_CHECKING, Union if TYPE_CHECKING: @@ -587,6 +588,46 @@ class ExtruderManager(QObject): return result + ## Get all extruder values for a certain setting. This function will skip the user settings container. + # + # This is exposed to SettingFunction so it can be used in value functions. + # + # \param key The key of the setting to retrieve values for. + # + # \return A list of values for all extruders. If an extruder does not have a value, it will not be in the list. + # If no extruder has the value, the list will contain the global value. + @staticmethod + def getDefaultExtruderValues(key): + global_stack = Application.getInstance().getGlobalContainerStack() + context = PropertyEvaluationContext(global_stack) + context.context["evaluate_from_container_index"] = 1 # skip the user settings container + context.context["override_operators"] = { + "extruderValue": ExtruderManager.getDefaultExtruderValue, + "extruderValues": ExtruderManager.getDefaultExtruderValues, + "resolveOrValue": ExtruderManager.getDefaultResolveOrValue + } + + result = [] + for extruder in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()): + # only include values from extruders that are "active" for the current machine instance + if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value", context = context): + continue + + value = extruder.getRawProperty(key, "value", context = context) + + if value is None: + continue + + if isinstance(value, SettingFunction): + value = value(extruder, context = context) + + result.append(value) + + if not result: + result.append(global_stack.getProperty(key, "value", context = context)) + + return result + ## Get all extruder values for a certain setting. # # This is exposed to qml for display purposes @@ -620,6 +661,35 @@ class ExtruderManager(QObject): return value + ## Get the default value from the given extruder. This function will skip the user settings container. + # + # This is exposed to SettingFunction to use in value functions. + # + # \param extruder_index The index of the extruder to get the value from. + # \param key The key of the setting to get the value of. + # + # \return The value of the setting for the specified extruder or for the + # global stack if not found. + @staticmethod + def getDefaultExtruderValue(extruder_index, key): + extruder = ExtruderManager.getInstance().getExtruderStack(extruder_index) + context = PropertyEvaluationContext(extruder) + context.context["evaluate_from_container_index"] = 1 # skip the user settings container + context.context["override_operators"] = { + "extruderValue": ExtruderManager.getDefaultExtruderValue, + "extruderValues": ExtruderManager.getDefaultExtruderValues, + "resolveOrValue": ExtruderManager.getDefaultResolveOrValue + } + + if extruder: + value = extruder.getRawProperty(key, "value", context = context) + if isinstance(value, SettingFunction): + value = value(extruder, context = context) + else: # Just a value from global. + value = Application.getInstance().getGlobalContainerStack().getProperty(key, "value", context = context) + + return value + ## Get the resolve value or value for a given key # # This is the effective value for a given key, it is used for values in the global stack. @@ -633,3 +703,25 @@ class ExtruderManager(QObject): resolved_value = global_stack.getProperty(key, "value") return resolved_value + + ## Get the resolve value or value for a given key without looking the first container (user container) + # + # This is the effective value for a given key, it is used for values in the global stack. + # This is exposed to SettingFunction to use in value functions. + # \param key The key of the setting to get the value of. + # + # \return The effective value + @staticmethod + def getDefaultResolveOrValue(key): + global_stack = Application.getInstance().getGlobalContainerStack() + context = PropertyEvaluationContext(global_stack) + context.context["evaluate_from_container_index"] = 1 # skip the user settings container + context.context["override_operators"] = { + "extruderValue": ExtruderManager.getDefaultExtruderValue, + "extruderValues": ExtruderManager.getDefaultExtruderValues, + "resolveOrValue": ExtruderManager.getDefaultResolveOrValue + } + + resolved_value = global_stack.getProperty(key, "value", context = context) + + return resolved_value diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index 1d3d23ea56..b13e51723b 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -4,12 +4,14 @@ from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty, QTimer from typing import Iterable +from UM.i18n import i18nCatalog import UM.Qt.ListModel from UM.Application import Application import UM.FlameProfiler from cura.Settings.ExtruderManager import ExtruderManager from cura.Settings.ExtruderStack import ExtruderStack #To listen to changes on the extruders. -from cura.Settings.MachineManager import MachineManager #To listen to changes on the extruders of the currently active machine. + +catalog = i18nCatalog("cura") ## Model that holds extruders. # @@ -172,7 +174,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): color = material.getMetaDataEntry("color_code", default = self.defaultColors[0]) if material else self.defaultColors[0] item = { "id": global_container_stack.getId(), - "name": "Global", + "name": catalog.i18nc("@menuitem", "Global"), "color": color, "index": -1, "definition": "" @@ -215,7 +217,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): if self._add_optional_extruder: item = { "id": "", - "name": "Not overridden", + "name": catalog.i18nc("@menuitem", "Not overridden"), "color": "#ffffff", "index": -1, "definition": "" diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 2eb951f721..88218c2f1e 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -96,18 +96,18 @@ class GlobalStack(CuraContainerStack): if not self.definition.findDefinitions(key = key): return None + if context is None: + context = PropertyEvaluationContext() + context.pushContainer(self) + # Handle the "resolve" property. - if self._shouldResolve(key, property_name): + if self._shouldResolve(key, property_name, context): self._resolving_settings.add(key) resolve = super().getProperty(key, "resolve", context) self._resolving_settings.remove(key) if resolve is not None: return resolve - if context is None: - context = PropertyEvaluationContext() - context.pushContainer(self) - # Handle the "limit_to_extruder" property. limit_to_extruder = super().getProperty(key, "limit_to_extruder", context) if limit_to_extruder is not None: @@ -151,7 +151,7 @@ class GlobalStack(CuraContainerStack): # Determine whether or not we should try to get the "resolve" property instead of the # requested property. - def _shouldResolve(self, key: str, property_name: str) -> bool: + def _shouldResolve(self, key: str, property_name: str, context: Optional[PropertyEvaluationContext] = None) -> bool: if property_name is not "value": # Do not try to resolve anything but the "value" property return False @@ -163,7 +163,7 @@ class GlobalStack(CuraContainerStack): # track all settings that are being resolved. return False - setting_state = super().getProperty(key, "state") + setting_state = super().getProperty(key, "state", context = context) if setting_state is not None and setting_state != InstanceState.Default: # When the user has explicitly set a value, we should ignore any resolve and # just return that value. diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index e0e81fba1b..f85acc164d 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -39,8 +39,6 @@ if TYPE_CHECKING: from cura.Settings.CuraContainerStack import CuraContainerStack from cura.Settings.GlobalStack import GlobalStack -import os - class MachineManager(QObject): def __init__(self, parent = None): @@ -49,6 +47,11 @@ class MachineManager(QObject): self._active_container_stack = None # type: CuraContainerStack self._global_container_stack = None # type: GlobalStack + # Used to store the new containers until after confirming the dialog + self._new_variant_container = None + self._new_material_container = None + self._new_quality_containers = [] + self._error_check_timer = QTimer() self._error_check_timer.setInterval(250) self._error_check_timer.setSingleShot(True) @@ -60,6 +63,7 @@ class MachineManager(QObject): self._instance_container_timer.timeout.connect(self.__onInstanceContainersChanged) Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) + ## When the global container is changed, active material probably needs to be updated. self.globalContainerChanged.connect(self.activeMaterialChanged) self.globalContainerChanged.connect(self.activeVariantChanged) @@ -67,10 +71,10 @@ class MachineManager(QObject): self._stacks_have_errors = None - self._empty_variant_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() - self._empty_material_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() - self._empty_quality_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() - self._empty_quality_changes_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() + self._empty_variant_container = ContainerRegistry.getInstance().findContainers(id = "empty_variant")[0] + self._empty_material_container = ContainerRegistry.getInstance().findContainers(id = "empty_material")[0] + self._empty_quality_container = ContainerRegistry.getInstance().findContainers(id = "empty_quality")[0] + self._empty_quality_changes_container = ContainerRegistry.getInstance().findContainers(id = "empty_quality_changes")[0] self._onGlobalContainerChanged() @@ -86,6 +90,9 @@ class MachineManager(QObject): ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeStackChanged) self.activeStackChanged.connect(self.activeStackValueChanged) + # when a user closed dialog check if any delayed material or variant changes need to be applied + Application.getInstance().onDiscardOrKeepProfileChangesClosed.connect(self._executeDelayedActiveContainerStackChanges) + Preferences.getInstance().addPreference("cura/active_machine", "") self._global_event_keys = set() @@ -111,7 +118,7 @@ class MachineManager(QObject): "The selected material is incompatible with the selected machine or configuration."), title = catalog.i18nc("@info:title", "Incompatible Material")) - globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value) + globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value) activeMaterialChanged = pyqtSignal() activeVariantChanged = pyqtSignal() activeQualityChanged = pyqtSignal() @@ -141,6 +148,14 @@ class MachineManager(QObject): self.outputDevicesChanged.emit() + @property + def newVariant(self): + return self._new_variant_container + + @property + def newMaterial(self): + return self._new_material_container + @pyqtProperty("QVariantList", notify = outputDevicesChanged) def printerOutputDevices(self): return self._printer_output_devices @@ -335,6 +350,7 @@ class MachineManager(QObject): self.activeQualityChanged.emit() self.activeVariantChanged.emit() self.activeMaterialChanged.emit() + self._updateStacksHaveErrors() # Prevents unwanted re-slices after changing machine self._error_check_timer.start() def _onInstanceContainersChanged(self, container): @@ -351,6 +367,8 @@ class MachineManager(QObject): @pyqtSlot(str) def setActiveMachine(self, stack_id: str) -> None: self.blurSettings.emit() # Ensure no-one has focus. + self._cancelDelayedActiveContainerStackChanges() + containers = ContainerRegistry.getInstance().findContainerStacks(id = stack_id) if containers: Application.getInstance().setGlobalContainerStack(containers[0]) @@ -749,7 +767,7 @@ class MachineManager(QObject): self.blurSettings.emit() old_material.nameChanged.disconnect(self._onMaterialNameChanged) - self._active_container_stack.material = material_container + self._new_material_container = material_container # self._active_container_stack will be updated with a delay Logger.log("d", "Active material changed") material_container.nameChanged.connect(self._onMaterialNameChanged) @@ -803,13 +821,13 @@ class MachineManager(QObject): old_material = self._active_container_stack.material if old_variant: self.blurSettings.emit() - self._active_container_stack.variant = containers[0] + self._new_variant_container = containers[0] # self._active_container_stack will be updated with a delay Logger.log("d", "Active variant changed to {active_variant_id}".format(active_variant_id = containers[0].getId())) preferred_material_name = None if old_material: preferred_material_name = old_material.getName() - - self.setActiveMaterial(self._updateMaterialContainer(self._global_container_stack.getBottom(), self._global_container_stack, containers[0], preferred_material_name).id) + preferred_material_id = self._updateMaterialContainer(self._global_container_stack.getBottom(), self._global_container_stack, containers[0], preferred_material_name).id + self.setActiveMaterial(preferred_material_id) else: Logger.log("w", "While trying to set the active variant, no variant was found to replace.") @@ -824,8 +842,6 @@ class MachineManager(QObject): if not containers or not self._global_container_stack: return - Logger.log("d", "Attempting to change the active quality to %s", quality_id) - # Quality profile come in two flavours: type=quality and type=quality_changes # If we found a quality_changes profile then look up its parent quality profile. container_type = containers[0].getMetaDataEntry("type") @@ -845,30 +861,79 @@ class MachineManager(QObject): if new_quality_settings_list is None: return - name_changed_connect_stacks = [] # Connect these stacks to the name changed callback + # check if any of the stacks have a not supported profile + # if that is the case, all stacks should have a not supported state (otherwise it will show quality_type normal) + has_not_supported_quality = False + + # check all stacks for not supported + for setting_info in new_quality_settings_list: + if setting_info["quality"].getMetaDataEntry("quality_type") == "not_supported": + has_not_supported_quality = True + break + + # set all stacks to not supported if that's the case + if has_not_supported_quality: + for setting_info in new_quality_settings_list: + setting_info["quality"] = self._empty_quality_container + + self._new_quality_containers.clear() + + # store the upcoming quality profile changes per stack for later execution + # this prevents re-slicing before the user has made a choice in the discard or keep dialog + # (see _executeDelayedActiveContainerStackChanges) for setting_info in new_quality_settings_list: stack = setting_info["stack"] stack_quality = setting_info["quality"] stack_quality_changes = setting_info["quality_changes"] - name_changed_connect_stacks.append(stack_quality) - name_changed_connect_stacks.append(stack_quality_changes) - self._replaceQualityOrQualityChangesInStack(stack, stack_quality, postpone_emit=True) - self._replaceQualityOrQualityChangesInStack(stack, stack_quality_changes, postpone_emit=True) + self._new_quality_containers.append({ + "stack": stack, + "quality": stack_quality, + "quality_changes": stack_quality_changes + }) - # Send emits that are postponed in replaceContainer. - # Here the stacks are finished replacing and every value can be resolved based on the current state. - for setting_info in new_quality_settings_list: - setting_info["stack"].sendPostponedEmits() - - # Connect to onQualityNameChanged - for stack in name_changed_connect_stacks: - stack.nameChanged.connect(self._onQualityNameChanged) + has_user_interaction = False if self.hasUserSettings and Preferences.getInstance().getValue("cura/active_mode") == 1: - self._askUserToKeepOrClearCurrentSettings() + # Show the keep/discard user settings dialog + has_user_interaction = Application.getInstance().discardOrKeepProfileChanges() - self.activeQualityChanged.emit() + # If there is no interaction with the user (it means the dialog showing "keep" or "discard" was not shown) + # because either there are not user changes or because the used already decided to always keep or discard, + # then the quality instance container is replaced, in which case, the activeQualityChanged signal is emitted. + if not has_user_interaction: + self._executeDelayedActiveContainerStackChanges() + + ## Used to update material and variant in the active container stack with a delay. + # This delay prevents the stack from triggering a lot of signals (eventually resulting in slicing) + # before the user decided to keep or discard any of their changes using the dialog. + # The Application.onDiscardOrKeepProfileChangesClosed signal triggers this method. + def _executeDelayedActiveContainerStackChanges(self): + if self._new_variant_container is not None: + self._active_container_stack.variant = self._new_variant_container + self._new_variant_container = None + + if self._new_material_container is not None: + self._active_container_stack.material = self._new_material_container + self._new_material_container = None + + # apply the new quality to all stacks + if self._new_quality_containers: + for new_quality in self._new_quality_containers: + self._replaceQualityOrQualityChangesInStack(new_quality["stack"], new_quality["quality"], postpone_emit = True) + self._replaceQualityOrQualityChangesInStack(new_quality["stack"], new_quality["quality_changes"], postpone_emit = True) + + for new_quality in self._new_quality_containers: + new_quality["stack"].nameChanged.connect(self._onQualityNameChanged) + new_quality["stack"].sendPostponedEmits() # Send the signals that were postponed in _replaceQualityOrQualityChangesInStack + + self._new_quality_containers.clear() + + ## Cancel set changes for material and variant in the active container stack. + # Used for ignoring any changes when switching between printers (setActiveMachine) + def _cancelDelayedActiveContainerStackChanges(self): + self._new_material_container = None + self._new_variant_container = None ## Determine the quality and quality changes settings for the current machine for a quality name. # @@ -892,8 +957,14 @@ class MachineManager(QObject): for stack in stacks: material = stack.material + + # TODO: fix this + if self._new_material_container and stack.getId() == self._active_container_stack.getId(): + material = self._new_material_container + quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) - if not quality: #No quality profile is found for this quality type. + if not quality: + # No quality profile is found for this quality type. quality = self._empty_quality_container result.append({"stack": stack, "quality": quality, "quality_changes": empty_quality_changes}) @@ -928,8 +999,12 @@ class MachineManager(QObject): else: Logger.log("e", "Could not find the global quality changes container with name %s", quality_changes_name) return None + material = global_container_stack.material + if self._new_material_container and self._active_container_stack.getId() == global_container_stack.getId(): + material = self._new_material_container + # For the global stack, find a quality which matches the quality_type in # the quality changes profile and also satisfies any material constraints. quality_type = global_quality_changes.getMetaDataEntry("quality_type") @@ -956,6 +1031,10 @@ class MachineManager(QObject): quality_changes = self._empty_quality_changes_container material = stack.material + + if self._new_material_container and self._active_container_stack.getId() == stack.getId(): + material = self._new_material_container + quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) if not quality: #No quality profile found for this quality type. quality = self._empty_quality_container @@ -987,9 +1066,6 @@ class MachineManager(QObject): stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) self._onQualityNameChanged() - def _askUserToKeepOrClearCurrentSettings(self): - Application.getInstance().discardOrKeepProfileChanges() - @pyqtProperty(str, notify = activeVariantChanged) def activeVariantName(self) -> str: if self._active_container_stack: @@ -1096,7 +1172,7 @@ class MachineManager(QObject): machine_stacks = ContainerRegistry.getInstance().findContainerStacks(type = "machine") other_machine_stacks = [s for s in machine_stacks if s.getId() != machine_id] if other_machine_stacks: - Application.getInstance().setGlobalContainerStack(other_machine_stacks[0]) + self.setActiveMachine(other_machine_stacks[0].getId()) ExtruderManager.getInstance().removeMachineExtruders(machine_id) containers = ContainerRegistry.getInstance().findInstanceContainers(type = "user", machine = machine_id) diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index bf1993b184..6353d3ce84 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -61,6 +61,7 @@ class ProfilesModel(InstanceContainersModel): active_extruder = extruder_manager.getActiveExtruderStack() extruder_stacks = extruder_manager.getActiveExtruderStacks() materials = [global_container_stack.material] + if active_extruder in extruder_stacks: extruder_stacks.remove(active_extruder) extruder_stacks = [active_extruder] + extruder_stacks @@ -83,21 +84,30 @@ class ProfilesModel(InstanceContainersModel): if quality.getMetaDataEntry("quality_type") not in quality_type_set: result.append(quality) + # if still profiles are found, add a single empty_quality ("Not supported") instance to the drop down list + if len(result) == 0: + # If not qualities are found we dynamically create a not supported container for this machine + material combination + not_supported_container = ContainerRegistry.getInstance().findContainers(id = "empty_quality")[0] + result.append(not_supported_container) + return result ## Re-computes the items in this model, and adds the layer height role. def _recomputeItems(self): - #Some globals that we can re-use. + + # Some globals that we can re-use. global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack is None: return # Detecting if the machine has multiple extrusion multiple_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1 + # Get the list of extruders and place the selected extruder at the front of the list. extruder_manager = ExtruderManager.getInstance() active_extruder = extruder_manager.getActiveExtruderStack() extruder_stacks = extruder_manager.getActiveExtruderStacks() + if multiple_extrusion: # Place the active extruder at the front of the list. # This is a workaround checking if there is an active_extruder or not before moving it to the front of the list. @@ -111,8 +121,7 @@ class ProfilesModel(InstanceContainersModel): extruder_stacks = new_extruder_stacks + extruder_stacks # Get a list of usable/available qualities for this machine and material - qualities = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack, - extruder_stacks) + qualities = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack, extruder_stacks) container_registry = ContainerRegistry.getInstance() machine_manager = Application.getInstance().getMachineManager() @@ -155,14 +164,24 @@ class ProfilesModel(InstanceContainersModel): # Now all the containers are set for item in containers: - profile = container_registry.findContainers(id=item["id"]) + profile = container_registry.findContainers(id = item["id"]) + + # When for some reason there is no profile container in the registry if not profile: - self._setItemLayerHeight(item, "", unit) + self._setItemLayerHeight(item, "", "") item["available"] = False yield item continue profile = profile[0] + + # When there is a profile but it's an empty quality should. It's shown in the list (they are "Not Supported" profiles) + if profile.getId() == "empty_quality": + self._setItemLayerHeight(item, "", "") + item["available"] = True + yield item + continue + item["available"] = profile in qualities # Easy case: This profile defines its own layer height. @@ -179,9 +198,10 @@ class ProfilesModel(InstanceContainersModel): if quality_result["stack"] is global_container_stack: quality = quality_result["quality"] break - else: #No global container stack in the results: + else: + # No global container stack in the results: if quality_results: - quality = quality_results[0]["quality"] #Take any of the extruders. + quality = quality_results[0]["quality"] # Take any of the extruders. else: quality = None if quality and quality.hasProperty("layer_height", "value"): @@ -189,7 +209,7 @@ class ProfilesModel(InstanceContainersModel): yield item continue - #Quality has no value for layer height either. Get the layer height from somewhere lower in the stack. + # Quality has no value for layer height either. Get the layer height from somewhere lower in the stack. skip_until_container = global_container_stack.material if not skip_until_container or skip_until_container == ContainerRegistry.getInstance().getEmptyInstanceContainer(): #No material in stack. skip_until_container = global_container_stack.variant diff --git a/cura/Settings/QualityAndUserProfilesModel.py b/cura/Settings/QualityAndUserProfilesModel.py index 602f8768da..9d7d913d5e 100644 --- a/cura/Settings/QualityAndUserProfilesModel.py +++ b/cura/Settings/QualityAndUserProfilesModel.py @@ -58,8 +58,8 @@ class QualityAndUserProfilesModel(ProfilesModel): # If the printer has multiple extruders then quality changes related to the current extruder are kept filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and qc.getMetaDataEntry("extruder") is not None and - qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition") or - qc.getMetaDataEntry("extruder") == active_extruder.definition.getId()] + (qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition") or + qc.getMetaDataEntry("extruder") == active_extruder.definition.getId())] else: # If not, the quality changes of the global stack are selected filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and diff --git a/cura/Settings/SimpleModeSettingsManager.py b/cura/Settings/SimpleModeSettingsManager.py new file mode 100644 index 0000000000..867a21702c --- /dev/null +++ b/cura/Settings/SimpleModeSettingsManager.py @@ -0,0 +1,92 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty + +from UM.Application import Application + + +class SimpleModeSettingsManager(QObject): + + def __init__(self, parent = None): + super().__init__(parent) + + self._machine_manager = Application.getInstance().getMachineManager() + self._is_profile_customized = False # True when default profile has user changes + self._is_profile_user_created = False # True when profile was custom created by user + + self._machine_manager.activeStackValueChanged.connect(self._updateIsProfileCustomized) + self._machine_manager.activeQualityChanged.connect(self._updateIsProfileUserCreated) + + # update on create as the activeQualityChanged signal is emitted before this manager is created when Cura starts + self._updateIsProfileCustomized() + self._updateIsProfileUserCreated() + + isProfileCustomizedChanged = pyqtSignal() + isProfileUserCreatedChanged = pyqtSignal() + + @pyqtProperty(bool, notify = isProfileCustomizedChanged) + def isProfileCustomized(self): + return self._is_profile_customized + + def _updateIsProfileCustomized(self): + user_setting_keys = set() + + if not self._machine_manager.activeMachine: + return False + + global_stack = self._machine_manager.activeMachine + + # check user settings in the global stack + user_setting_keys.update(set(global_stack.userChanges.getAllKeys())) + + # check user settings in the extruder stacks + if global_stack.extruders: + for extruder_stack in global_stack.extruders.values(): + user_setting_keys.update(set(extruder_stack.userChanges.getAllKeys())) + + # remove settings that are visible in recommended (we don't show the reset button for those) + for skip_key in self.__ignored_custom_setting_keys: + if skip_key in user_setting_keys: + user_setting_keys.remove(skip_key) + + has_customized_user_settings = len(user_setting_keys) > 0 + + if has_customized_user_settings != self._is_profile_customized: + self._is_profile_customized = has_customized_user_settings + self.isProfileCustomizedChanged.emit() + + @pyqtProperty(bool, notify = isProfileUserCreatedChanged) + def isProfileUserCreated(self): + return self._is_profile_user_created + + def _updateIsProfileUserCreated(self): + quality_changes_keys = set() + + if not self._machine_manager.activeMachine: + return False + + global_stack = self._machine_manager.activeMachine + + # check quality changes settings in the global stack + quality_changes_keys.update(set(global_stack.qualityChanges.getAllKeys())) + + # check quality changes settings in the extruder stacks + if global_stack.extruders: + for extruder_stack in global_stack.extruders.values(): + quality_changes_keys.update(set(extruder_stack.qualityChanges.getAllKeys())) + + # check if the qualityChanges container is not empty (meaning it is a user created profile) + has_quality_changes = len(quality_changes_keys) > 0 + + if has_quality_changes != self._is_profile_user_created: + self._is_profile_user_created = has_quality_changes + self.isProfileUserCreatedChanged.emit() + + # These are the settings included in the Simple ("Recommended") Mode, so only when the other settings have been + # changed, we consider it as a user customized profile in the Simple ("Recommended") Mode. + __ignored_custom_setting_keys = ["support_enable", + "infill_sparse_density", + "gradual_infill_steps", + "adhesion_type", + "support_extruder_nr"] diff --git a/cura/Settings/UserChangesModel.py b/cura/Settings/UserChangesModel.py index 8b61186650..93274d61c9 100644 --- a/cura/Settings/UserChangesModel.py +++ b/cura/Settings/UserChangesModel.py @@ -6,6 +6,7 @@ from cura.Settings.ExtruderManager import ExtruderManager from UM.Settings.ContainerRegistry import ContainerRegistry from UM.i18n import i18nCatalog from UM.Settings.SettingFunction import SettingFunction +from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext from collections import OrderedDict import os @@ -66,8 +67,15 @@ class UserChangesModel(ListModel): containers.extend(latest_stack.getContainers()) latest_stack = latest_stack.getNextStack() - # Drop the user container. + # Override "getExtruderValue" with "getDefaultExtruderValue" so we can get the default values user_changes = containers.pop(0) + default_value_resolve_context = PropertyEvaluationContext(stack) + default_value_resolve_context.context["evaluate_from_container_index"] = 1 # skip the user settings container + default_value_resolve_context.context["override_operators"] = { + "extruderValue": ExtruderManager.getDefaultExtruderValue, + "extruderValues": ExtruderManager.getDefaultExtruderValues, + "resolveOrValue": ExtruderManager.getDefaultResolveOrValue + } for setting_key in user_changes.getAllKeys(): original_value = None @@ -90,16 +98,16 @@ class UserChangesModel(ListModel): for container in containers: if stack == global_stack: - resolve = global_stack.getProperty(setting_key, "resolve") + resolve = global_stack.getProperty(setting_key, "resolve", default_value_resolve_context) if resolve is not None: original_value = resolve break - original_value = container.getProperty(setting_key, "value") + original_value = container.getProperty(setting_key, "value", default_value_resolve_context) # If a value is a function, ensure it's called with the stack it's in. if isinstance(original_value, SettingFunction): - original_value = original_value(stack) + original_value = original_value(stack, default_value_resolve_context) if original_value is not None: break diff --git a/cura_app.py b/cura_app.py index 6869fd2111..d725bc1200 100755 --- a/cura_app.py +++ b/cura_app.py @@ -41,8 +41,9 @@ if "PYTHONPATH" in os.environ.keys(): # If PYTHONPATH is u sys.path.insert(1, PATH_real) # Insert it at 1 after os.curdir, which is 0. def exceptHook(hook_type, value, traceback): - import cura.CrashHandler - cura.CrashHandler.show(hook_type, value, traceback) + from cura.CrashHandler import CrashHandler + _crash_handler = CrashHandler(hook_type, value, traceback) + _crash_handler.show() sys.excepthook = exceptHook diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 79e137e87f..28d12bf2d5 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -21,11 +21,14 @@ from cura.Settings.CuraStackBuilder import CuraStackBuilder from cura.Settings.ExtruderManager import ExtruderManager from cura.Settings.ExtruderStack import ExtruderStack from cura.Settings.GlobalStack import GlobalStack +from cura.Settings.CuraContainerStack import _ContainerIndexes +from cura.QualityManager import QualityManager from configparser import ConfigParser import zipfile import io import configparser +import os i18n_catalog = i18nCatalog("cura") @@ -756,13 +759,37 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._container_registry.removeContainer(container.getId()) return + # Check quality profiles to make sure that if one stack has the "not supported" quality profile, + # all others should have the same. + # + # This block code tries to fix the following problems in Cura 3.0 and earlier: + # 1. The upgrade script can rename all "Not Supported" quality profiles to "empty_quality", but it cannot fix + # the problem that the global stack the extruder stacks may have different quality profiles. The code + # below loops over all stacks and make sure that if there is one stack with "Not Supported" profile, the + # rest should also use the "Not Supported" profile. + # 2. In earlier versions (at least 2.7 and 3.0), a wrong quality profile could be assigned to a stack. For + # example, a UM3 can have a BB 0.8 variant with "aa04_pla_fast" quality profile enabled. To fix this, + # in the code below we also check the actual available quality profiles for the machine. + # + has_not_supported = False + for stack in [global_stack] + extruder_stacks: + if stack.quality.getId() == "empty_quality": + has_not_supported = True + break + if not has_not_supported: + available_quality = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_stack, extruder_stacks) + has_not_supported = not available_quality + if has_not_supported: + empty_quality_container = self._container_registry.findInstanceContainers(id = "empty_quality")[0] + for stack in [global_stack] + extruder_stacks: + stack.replaceContainer(_ContainerIndexes.Quality, empty_quality_container) + # # Replacing the old containers if resolve is "new". # When resolve is "new", some containers will get renamed, so all the other containers that reference to those # MUST get updated too. # if self._resolve_strategies["machine"] == "new": - # A new machine was made, but it was serialized with the wrong user container. Fix that now. for container in user_instance_containers: # replacing the container ID for user instance containers for the extruders @@ -876,6 +903,11 @@ class ThreeMFWorkspaceReader(WorkspaceReader): nodes = self._3mf_mesh_reader.read(file_name) if nodes is None: nodes = [] + + base_file_name = os.path.basename(file_name) + if base_file_name.endswith(".curaproject.3mf"): + base_file_name = base_file_name[:base_file_name.rfind(".curaproject.3mf")] + Application.getInstance().projectFileLoaded.emit(base_file_name) return nodes ## HACK: Replaces the material container in the given stack with a newly created material container. diff --git a/plugins/ChangeLogPlugin/ChangeLog.py b/plugins/ChangeLogPlugin/ChangeLog.py index 8d1e54f40c..a80779da50 100644 --- a/plugins/ChangeLogPlugin/ChangeLog.py +++ b/plugins/ChangeLogPlugin/ChangeLog.py @@ -8,7 +8,6 @@ from UM.Application import Application from UM.PluginRegistry import PluginRegistry from UM.Version import Version -from PyQt5.QtQuick import QQuickView from PyQt5.QtQml import QQmlComponent, QQmlContext from PyQt5.QtCore import QUrl, pyqtSlot, QObject diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 57e6e05d9c..d7d68e04a2 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -1,5 +1,92 @@ +[3.0.4] +*Bug fixes +- Fixed OpenGL issue that prevents Cura from starting. + +*License agreement on the first startup has been added + +[3.0.3] +*Bug fixes +- Add missing libraries for the MakePrintable plugin. + [3.0.0] -*Will be updated soon! +*Faster start-up +Start-up speed has been cut in half compared to the previous version. + +*New color scheme +Color scheme has been updated to reflect Ultimaker Cura rebrand. + +*Updated UX design +The Ultimaker Cura logo has moved from the bottom to the top of the interface. Print status icons have been updated and repositioned. + +*Redesigned splash screen +A new splash screen on Ultimaker Cura startup has been added. + +*Top navigation bar improvements +The width of tab functionality changes accordingly to the word space (multilingual). + +*Print quality slider +A slider can now be used to control the quality profile in recommended mode. + +*Infill slider +Model infill can now be changed using a slider in recommended mode. + +*Changed layer view +Layer view icon, panel and slider have moved to top-right of interface. + +*Rasterized build plate +The build plate now shows graduations of 10 mm and 1 mm for easy model positioning. + +*Changed row of extruder buttons +Extruder tabs have become buttons and icons have been updated. + +*Add an "Export to Cura" button in SOLIDWORKS +SOLIDWORKS plugin can now be installed using an automatic installer. + +*Siemens NX macro +When a user updates models in Siemens NX and clicks the button, the updated models replace the models opened in Ultimaker Cura. + +*Skin removal width +Remove thin strips of skin from a model to prevent print head zigzagging, in turn preventing vibrations. + +*Skin expand distance +Cutting away skins on steep overhangs makes prints less sturdy. By expanding skins with the thickness of walls, features will be better supported. In addition, features such as towers on top of infill will be stronger. + +*Extra skin wall count +Printing extra skin directly on top of infill can lead to gaps, curling and pillowing. This is reduced by printing a wall around the skin first, and also improves the printing speed. + +*Minimum extrusion for skin +Will prevent filling small gaps that are probably filled already, resulting in less strings, better top details and faster prints. + +*PVA retractions +PVA (switch) retraction length is increased, minimum travel distance for retraction is decreased and max count is slightly increased, this reduces stringing by a lot at the cost of slightly increased print time. + +*Z seam options +Gives the user control over where to place the seam - hide it in convex corners or in easy to remove locations such as concave corners. Don’t let corner angles influence the seam position. + +*Quarter cubic infill +Similar to tetrahedral (octet) infill, but half of the lines are shifted half of the period up. This pattern sacrifices some rigidity of octet infill for greater toughness. + +*Cross infill +A fractal pattern infill that requires fewer retractions than other infill types. This is useful for flexible materials as it causes less material elongation. The internal structure given by this infill also assists flexible models having more resistance, while retaining ‘soft’ properties in all directions. + +*Layer start negative position +Layer start X/Y values can be less than 0 when the machine centre is zero. + +*PostProcessing stretch script +This new script performs "post stretch" algorithm to fix the problem of insufficient inner and outer diameters. Thanks to electrocbd for contributing. + +*Ironing speed settings +Ironing speed settings have been moved to experimental category. + +*Doodle3D plugin +Update Doodle3D plugin to connect with printers. Thanks to mith for contributing. + +*Bug fixes +- Customized profiles are not sent when connecting to a printer +- Sync z-hop with layer changes, thanks to smartavionics for contributing +- Memory leaks on MacOS +- Printer name not loaded when project file is opened +- Doodle3D Wifi box was selected by default on non-UM3 printers [2.7.0] *Top surface skin diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 914aa1dee0..0c1fc6f4ad 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -293,7 +293,7 @@ class CuraEngineBackend(QObject, Backend): error_labels.add(definitions[0].label) error_labels = ", ".join(error_labels) - self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current settings. The following settings have errors: {0}".format(error_labels)), + self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current settings. The following settings have errors: {0}").format(error_labels), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() self.backendStateChange.emit(BackendState.Error) diff --git a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py index c9fac23d91..a352564bc2 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py @@ -240,3 +240,4 @@ class ProcessSlicedLayersJob(Job): else: if self._progress_message: self._progress_message.hide() + diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py index 5ee3493549..458aca5787 100644 --- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py @@ -1,6 +1,9 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from PyQt5.QtCore import QUrl +from PyQt5.QtGui import QDesktopServices + from UM.Extension import Extension from UM.Preferences import Preferences from UM.Logger import Logger @@ -32,6 +35,17 @@ class FirmwareUpdateChecker(Extension): if Preferences.getInstance().getValue("info/automatic_update_check"): ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded) + self._download_url = None + + ## Callback for the message that is spawned when there is a new version. + def _onActionTriggered(self, message, action): + if action == "download": + if self._download_url is not None: + QDesktopServices.openUrl(QUrl(self._download_url)) + + def _onSetDownloadUrl(self, download_url): + self._download_url = download_url + def _onContainerAdded(self, container): # Only take care when a new GlobalStack was added if isinstance(container, GlobalStack): @@ -45,5 +59,7 @@ class FirmwareUpdateChecker(Extension): # \param silent type(boolean) Suppresses messages other than "new version found" messages. # This is used when checking for a new firmware version at startup. def checkFirmwareVersion(self, container = None, silent = False): - job = FirmwareUpdateCheckerJob(container = container, silent = silent, url = self.JEDI_VERSION_URL) + job = FirmwareUpdateCheckerJob(container = container, silent = silent, url = self.JEDI_VERSION_URL, + callback = self._onActionTriggered, + set_download_url_callback = self._onSetDownloadUrl) job.start() diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py index 8f299761fc..6dd7338cfd 100644 --- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py @@ -10,30 +10,21 @@ from UM.Job import Job import urllib.request import codecs -from PyQt5.QtCore import QUrl -from PyQt5.QtGui import QDesktopServices - from UM.i18n import i18nCatalog i18n_catalog = i18nCatalog("cura") ## This job checks if there is an update available on the provided URL. class FirmwareUpdateCheckerJob(Job): - def __init__(self, container = None, silent = False, url = None): + def __init__(self, container = None, silent = False, url = None, callback = None, set_download_url_callback = None): super().__init__() self._container = container self.silent = silent self._url = url - self._download_url = None # If an update was found, the download_url will be set to the location of the new version. - - ## Callback for the message that is spawned when there is a new version. - def actionTriggered(self, message, action): - if action == "download": - if self._download_url is not None: - QDesktopServices.openUrl(QUrl(self._download_url)) + self._callback = callback + self._set_download_url_callback = set_download_url_callback def run(self): - self._download_url = None # Reset download ur. if not self._url: Logger.log("e", "Can not check for a new release. URL not set!") return @@ -70,13 +61,14 @@ class FirmwareUpdateCheckerJob(Job): # notify the user when no new firmware version is available. if (checked_version != "") and (checked_version != current_version): Logger.log("i", "SHOWING FIRMWARE UPDATE MESSAGE") - message = Message(i18n_catalog.i18nc("@info Don't translate {machine_name}, since it gets replaced by a printer name!", "To ensure that your {machine_name} is equipped with the latest features it is recommended to update the firmware regularly. This can be done on the {machine_name} (when connected to the network) or via USB.").format(machine_name = machine_name), + message = Message(i18n_catalog.i18nc("@info Don't translate {machine_name}, since it gets replaced by a printer name!", "New features are available for your {machine_name}! It is recommended to update the firmware on your printer.").format(machine_name = machine_name), title = i18n_catalog.i18nc("@info:title The %s gets replaced with the printer name.", "New %s firmware available") % machine_name) - message.addAction("download", i18n_catalog.i18nc("@action:button", "Download"), "[no_icon]", "[no_description]") + message.addAction("download", i18n_catalog.i18nc("@action:button", "How to update"), "[no_icon]", "[no_description]") # If we do this in a cool way, the download url should be available in the JSON file - self._download_url = "https://ultimaker.com/en/resources/20500-upgrade-firmware" - message.actionTriggered.connect(self.actionTriggered) + if self._set_download_url_callback: + self._set_download_url_callback("https://ultimaker.com/en/resources/20500-upgrade-firmware") + message.actionTriggered.connect(self._callback) message.show() except Exception as e: diff --git a/plugins/LayerView/LayerSliderLabel.qml b/plugins/LayerView/LayerSliderLabel.qml index 892f1775ea..c989679285 100644 --- a/plugins/LayerView/LayerSliderLabel.qml +++ b/plugins/LayerView/LayerSliderLabel.qml @@ -48,7 +48,7 @@ UM.PointingRectangle { anchors { left: parent.left - leftMargin: UM.Theme.getSize("default_margin").width / 2 + leftMargin: Math.floor(UM.Theme.getSize("default_margin").width / 2) verticalCenter: parent.verticalCenter } @@ -90,7 +90,7 @@ UM.PointingRectangle { anchors { left: parent.right - leftMargin: UM.Theme.getSize("default_margin").width / 2 + leftMargin: Math.floor(UM.Theme.getSize("default_margin").width / 2) verticalCenter: parent.verticalCenter } diff --git a/plugins/LayerView/LayerView.py b/plugins/LayerView/LayerView.py index d23dd90915..04be97b747 100755 --- a/plugins/LayerView/LayerView.py +++ b/plugins/LayerView/LayerView.py @@ -112,7 +112,6 @@ class LayerView(View): self._layer_pass = LayerPass.LayerPass(1, 1) self._compatibility_mode = OpenGLContext.isLegacyOpenGL() or bool(Preferences.getInstance().getValue("view/force_layer_view_compatibility_mode")) self._layer_pass.setLayerView(self) - self.getRenderer().addRenderPass(self._layer_pass) return self._layer_pass def getCurrentLayer(self): @@ -310,7 +309,8 @@ class LayerView(View): if event.type == Event.ViewActivateEvent: # Make sure the LayerPass is created - self.getLayerPass() + layer_pass = self.getLayerPass() + self.getRenderer().addRenderPass(layer_pass) Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged) self._onGlobalStackChanged() @@ -335,6 +335,7 @@ class LayerView(View): if self._global_container_stack: self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged) + self.getRenderer().removeRenderPass(self._layer_pass) self._composite_pass.setLayerBindings(self._old_layer_bindings) self._composite_pass.setCompositeShader(self._old_composite_shader) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 80258ef548..360dae7a2c 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -79,7 +79,7 @@ class MachineSettingsAction(MachineAction): @pyqtSlot() def onFinishAction(self): # Restore autoslicing when the machineaction is dismissed - if self._backend.determineAutoSlicing(): + if self._backend and self._backend.determineAutoSlicing(): self._backend.tickle() def _onActiveExtruderStackChanged(self): @@ -147,6 +147,7 @@ class MachineSettingsAction(MachineAction): for setting_instance in extruder_user_container.findInstances(): setting_key = setting_instance.definition.key settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder") + if settable_per_extruder: limit_to_extruder = self._global_container_stack.getProperty(setting_key, "limit_to_extruder") @@ -154,11 +155,16 @@ class MachineSettingsAction(MachineAction): global_user_container.setProperty(setting_key, "value", extruder_user_container.getProperty(setting_key, "value")) extruder_user_container.removeInstance(setting_key) - # Check to see if any features are set to print with an extruder that will no longer exist - for setting_key in ["adhesion_extruder_nr", "support_extruder_nr", "support_extruder_nr_layer_0", "support_infill_extruder_nr", "support_interface_extruder_nr"]: - if int(self._global_container_stack.getProperty(setting_key, "value")) > extruder_count - 1: - Logger.log("i", "Lowering %s setting to match number of extruders", setting_key) - self._global_container_stack.getTop().setProperty(setting_key, "value", extruder_count - 1) + # reset all extruder number settings whose value is no longer valid + for setting_instance in self._global_container_stack.userChanges.findInstances(): + setting_key = setting_instance.definition.key + if not self._global_container_stack.getProperty(setting_key, "type") in ("extruder", "optional_extruder"): + continue + + old_value = int(self._global_container_stack.userChanges.getProperty(setting_key, "value")) + if old_value >= extruder_count: + self._global_container_stack.userChanges.removeInstance(setting_key) + Logger.log("d", "Reset [%s] because its old value [%s] is no longer valid ", setting_key, old_value) # Check to see if any objects are set to print with an extruder that will no longer exist root_node = Application.getInstance().getController().getScene().getRoot() diff --git a/plugins/PluginBrowser/PluginBrowser.py b/plugins/PluginBrowser/PluginBrowser.py index 0037d4bc59..37ad128b49 100644 --- a/plugins/PluginBrowser/PluginBrowser.py +++ b/plugins/PluginBrowser/PluginBrowser.py @@ -26,7 +26,7 @@ class PluginBrowser(QObject, Extension): def __init__(self, parent=None): super().__init__(parent) - self._api_version = 1 + self._api_version = 2 self._api_url = "http://software.ultimaker.com/cura/v%s/" % self._api_version self._plugin_list_request = None diff --git a/plugins/PluginBrowser/PluginBrowser.qml b/plugins/PluginBrowser/PluginBrowser.qml index 71e88c652b..13000d23ad 100644 --- a/plugins/PluginBrowser/PluginBrowser.qml +++ b/plugins/PluginBrowser/PluginBrowser.qml @@ -114,7 +114,7 @@ UM.Dialog anchors.rightMargin: UM.Theme.getSize("default_margin").width Label { - text: "" + model.name + " - " + model.author + text: "" + model.name + "" + ((model.author !== "") ? (" - " + model.author) : "") width: contentWidth height: contentHeight + UM.Theme.getSize("default_margin").height verticalAlignment: Text.AlignVCenter diff --git a/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py b/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py index d87499273b..5ad2caed0b 100644 --- a/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py +++ b/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py @@ -4,8 +4,6 @@ from . import RemovableDrivePlugin -from UM.Logger import Logger - import subprocess import os @@ -15,12 +13,12 @@ import plistlib class OSXRemovableDrivePlugin(RemovableDrivePlugin.RemovableDrivePlugin): def checkRemovableDrives(self): drives = {} - p = subprocess.Popen(["system_profiler", "SPUSBDataType", "-xml"], stdout = subprocess.PIPE) + p = subprocess.Popen(["system_profiler", "SPUSBDataType", "-xml"], stdout = subprocess.PIPE, stderr = subprocess.PIPE) plist = plistlib.loads(p.communicate()[0]) result = self._recursiveSearch(plist, "removable_media") - p = subprocess.Popen(["system_profiler", "SPCardReaderDataType", "-xml"], stdout=subprocess.PIPE) + p = subprocess.Popen(["system_profiler", "SPCardReaderDataType", "-xml"], stdout=subprocess.PIPE, stderr = subprocess.PIPE) plist = plistlib.loads(p.communicate()[0]) result.extend(self._recursiveSearch(plist, "removable_media")) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 194337cca0..8ba7156da8 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -83,8 +83,7 @@ Component anchors.leftMargin: UM.Theme.getSize("default_margin").width anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("default_margin").width - //TODO; It's probably nicer to do this with a dynamic data model instead of hardcoding this. - //But you know the drill; time constraints don't result in elegant code. + Item { width: parent.width diff --git a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml b/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml index 205dbdc9d9..cec2bf0f0f 100644 --- a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml +++ b/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml @@ -114,7 +114,7 @@ Cura.MachineAction Column { - width: (parent.width * 0.5) | 0 + width: Math.floor(parent.width * 0.5) spacing: UM.Theme.getSize("default_margin").height ScrollView @@ -191,8 +191,6 @@ Cura.MachineAction anchors.left: parent.left anchors.right: parent.right wrapMode: Text.WordWrap - //: Tips label - //TODO: get actual link from webteam text: catalog.i18nc("@label", "If your printer is not listed, read the network printing troubleshooting guide").arg("https://ultimaker.com/en/troubleshooting"); onLinkActivated: Qt.openUrlExternally(link) } @@ -200,7 +198,7 @@ Cura.MachineAction } Column { - width: (parent.width * 0.5) | 0 + width: Math.floor(parent.width * 0.5) visible: base.selectedPrinter ? true : false spacing: UM.Theme.getSize("default_margin").height Label @@ -218,13 +216,13 @@ Cura.MachineAction columns: 2 Label { - width: (parent.width * 0.5) | 0 + width: Math.floor(parent.width * 0.5) wrapMode: Text.WordWrap text: catalog.i18nc("@label", "Type") } Label { - width: (parent.width * 0.5) | 0 + width: Math.floor(parent.width * 0.5) wrapMode: Text.WordWrap text: { @@ -249,25 +247,25 @@ Cura.MachineAction } Label { - width: (parent.width * 0.5) | 0 + width: Math.floor(parent.width * 0.5) wrapMode: Text.WordWrap text: catalog.i18nc("@label", "Firmware version") } Label { - width: (parent.width * 0.5) | 0 + width: Math.floor(parent.width * 0.5) wrapMode: Text.WordWrap text: base.selectedPrinter ? base.selectedPrinter.firmwareVersion : "" } Label { - width: (parent.width * 0.5) | 0 + width: Math.floor(parent.width * 0.5) wrapMode: Text.WordWrap text: catalog.i18nc("@label", "Address") } Label { - width: (parent.width * 0.5) | 0 + width: Math.floor(parent.width * 0.5) wrapMode: Text.WordWrap text: base.selectedPrinter ? base.selectedPrinter.ipAddress : "" } @@ -279,7 +277,7 @@ Cura.MachineAction wrapMode: Text.WordWrap text:{ // The property cluster size does not exist for older UM3 devices. - if(base.selectedPrinter != undefined && base.selectedPrinter.clusterSize == null || base.selectedPrinter.clusterSize == 1) + if(!base.selectedPrinter || base.selectedPrinter.clusterSize == null || base.selectedPrinter.clusterSize == 1) { return ""; } diff --git a/plugins/UM3NetworkPrinting/MonitorItem.qml b/plugins/UM3NetworkPrinting/MonitorItem.qml index ffa2e8c85d..f69df41dd4 100644 --- a/plugins/UM3NetworkPrinting/MonitorItem.qml +++ b/plugins/UM3NetworkPrinting/MonitorItem.qml @@ -17,10 +17,10 @@ Component } return (sourceSize.width / sourceSize.height) > (maximumWidth / maximumHeight); } - property real _width: Math.min(maximumWidth, sourceSize.width) - property real _height: Math.min(maximumHeight, sourceSize.height) - width: proportionalHeight ? _width : sourceSize.width * _height / sourceSize.height - height: !proportionalHeight ? _height : sourceSize.height * _width / sourceSize.width + property real _width: Math.floor(Math.min(maximumWidth, sourceSize.width)) + property real _height: Math.floor(Math.min(maximumHeight, sourceSize.height)) + width: proportionalHeight ? _width : Math.floor(sourceSize.width * _height / sourceSize.height) + height: !proportionalHeight ? _height : Math.floor(sourceSize.height * _width / sourceSize.width) anchors.horizontalCenter: parent.horizontalCenter onVisibleChanged: diff --git a/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py index cfa793996b..b6e94121f8 100644 --- a/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py @@ -103,6 +103,7 @@ class NetworkClusterPrinterOutputDevice(NetworkPrinterOutputDevice.NetworkPrinte self._can_pause = True self._can_abort = True self._can_pre_heat_bed = False + self._can_control_manually = False self._cluster_size = int(properties.get(b"cluster_size", 0)) self._cleanupRequest() @@ -220,7 +221,9 @@ class NetworkClusterPrinterOutputDevice(NetworkPrinterOutputDevice.NetworkPrinte self.setPrinters(json_data) def materialHotendChangedMessage(self, callback): - pass # Do nothing. + # When there is just one printer, the activate configuration option is enabled + if (self._cluster_size == 1): + super().materialHotendChangedMessage(callback = callback) def _startCameraStream(self): ## Request new image diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 9dedc87df4..d8dd780ed5 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -102,6 +102,8 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): self._target_bed_temperature = 0 self._processing_preheat_requests = True + self._can_control_manually = False + self.setPriority(3) # Make sure the output device gets selected above local file output self.setName(key) self.setShortDescription(i18n_catalog.i18nc("@action:button Preceded by 'Ready to'.", "Print over network")) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py index 3566cda69f..46538f1af9 100644 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py @@ -1,19 +1,18 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -import os import time import json +from queue import Queue +from threading import Event, Thread -from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot +from PyQt5.QtCore import QObject, pyqtSlot from PyQt5.QtCore import QUrl from PyQt5.QtGui import QDesktopServices -from PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager, QNetworkReply -from PyQt5.QtQml import QQmlComponent, QQmlContext +from PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager from UM.Application import Application from UM.Logger import Logger from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin -from UM.PluginRegistry import PluginRegistry from UM.Preferences import Preferences from UM.Signal import Signal, signalemitter from zeroconf import Zeroconf, ServiceBrowser, ServiceStateChange, ServiceInfo # type: ignore @@ -57,6 +56,16 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin): self._network_requests_buffer = {} # store api responses until data is complete + # The zeroconf service changed requests are handled in a separate thread, so we can re-schedule the requests + # which fail to get detailed service info. + # Any new or re-scheduled requests will be appended to the request queue, and the handling thread will pick + # them up and process them. + self._service_changed_request_queue = Queue() + self._service_changed_request_event = Event() + self._service_changed_request_thread = Thread(target = self._handleOnServiceChangedRequests, + daemon = True) + self._service_changed_request_thread.start() + addPrinterSignal = Signal() removePrinterSignal = Signal() printerListChanged = Signal() @@ -76,7 +85,7 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin): # After network switching, one must make a new instance of Zeroconf # On windows, the instance creation is very fast (unnoticable). Other platforms? self._zero_conf = Zeroconf() - self._browser = ServiceBrowser(self._zero_conf, u'_ultimaker._tcp.local.', [self._onServiceChanged]) + self._browser = ServiceBrowser(self._zero_conf, u'_ultimaker._tcp.local.', [self._appendServiceChangedRequest]) # Look for manual instances from preference for address in self._manual_instances: @@ -154,7 +163,18 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin): if status_code == 200: # We know it's a cluster printer Logger.log("d", "Cluster printer detected: [%s]", reply.url()) + + try: + cluster_printers_list = json.loads(bytes(reply.readAll()).decode("utf-8")) + except json.JSONDecodeError: + Logger.log("e", "Printer returned invalid JSON.") + return + except UnicodeDecodeError: + Logger.log("e", "Printer returned incorrect UTF-8.") + return + self._network_requests_buffer[address]["cluster"] = True + self._network_requests_buffer[address]["cluster_size"] = len(cluster_printers_list) else: Logger.log("d", "This url is not from a cluster printer: [%s]", reply.url()) self._network_requests_buffer[address]["cluster"] = False @@ -166,7 +186,6 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin): instance_name = "manual:%s" % address system_info = self._network_requests_buffer[address]["system"] - is_cluster = self._network_requests_buffer[address]["cluster"] machine = "unknown" if "variant" in system_info: variant = system_info["variant"] @@ -182,10 +201,14 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin): b"manual": b"true", b"machine": machine.encode("utf-8") } + + if self._network_requests_buffer[address]["cluster"]: + properties[b"cluster_size"] = self._network_requests_buffer[address]["cluster_size"] + if instance_name in self._printers: # Only replace the printer if it is still in the list of (manual) printers self.removePrinter(instance_name) - self.addPrinter(instance_name, address, properties, force_cluster=is_cluster) + self.addPrinter(instance_name, address, properties) del self._network_requests_buffer[address] @@ -216,12 +239,9 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin): self._printers[key].connectionStateChanged.disconnect(self._onPrinterConnectionStateChanged) ## Because the model needs to be created in the same thread as the QMLEngine, we use a signal. - def addPrinter(self, name, address, properties, force_cluster=False): + def addPrinter(self, name, address, properties): cluster_size = int(properties.get(b"cluster_size", -1)) - was_cluster_before = name in self._cluster_printers_seen - if was_cluster_before: - Logger.log("d", "Printer [%s] had Cura Connect before, so assume it's still equipped with Cura Connect.", name) - if force_cluster or cluster_size >= 0 or was_cluster_before: + if cluster_size >= 0: printer = NetworkClusterPrinterOutputDevice.NetworkClusterPrinterOutputDevice( name, address, properties, self._api_prefix) else: @@ -254,7 +274,8 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin): else: self.getOutputDeviceManager().removeOutputDevice(key) - ## Handler for zeroConf detection + ## Handler for zeroConf detection. + # Return True or False indicating if the process succeeded. def _onServiceChanged(self, zeroconf, service_type, name, state_change): if state_change == ServiceStateChange.Added: Logger.log("d", "Bonjour service added: %s" % name) @@ -284,11 +305,50 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin): Logger.log("w", "The type of the found device is '%s', not 'printer'! Ignoring.." % type_of_device ) else: Logger.log("w", "Could not get information about %s" % name) + return False elif state_change == ServiceStateChange.Removed: Logger.log("d", "Bonjour service removed: %s" % name) self.removePrinterSignal.emit(str(name)) + return True + + ## Appends a service changed request so later the handling thread will pick it up and processes it. + def _appendServiceChangedRequest(self, zeroconf, service_type, name, state_change): + # append the request and set the event so the event handling thread can pick it up + item = (zeroconf, service_type, name, state_change) + self._service_changed_request_queue.put(item) + self._service_changed_request_event.set() + + def _handleOnServiceChangedRequests(self): + while True: + # wait for the event to be set + self._service_changed_request_event.wait(timeout = 5.0) + # stop if the application is shutting down + if Application.getInstance().isShuttingDown(): + return + + self._service_changed_request_event.clear() + + # handle all pending requests + reschedule_requests = [] # a list of requests that have failed so later they will get re-scheduled + while not self._service_changed_request_queue.empty(): + request = self._service_changed_request_queue.get() + zeroconf, service_type, name, state_change = request + try: + result = self._onServiceChanged(zeroconf, service_type, name, state_change) + if not result: + reschedule_requests.append(request) + except Exception: + Logger.logException("e", "Failed to get service info for [%s] [%s], the request will be rescheduled", + service_type, name) + reschedule_requests.append(request) + + # re-schedule the failed requests if any + if reschedule_requests: + for request in reschedule_requests: + self._service_changed_request_queue.put(request) + @pyqtSlot() def openControlPanel(self): Logger.log("d", "Opening print jobs web UI...") diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml index 624c02f735..03ff4542e1 100644 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -10,7 +10,7 @@ Item id: extruderInfo property var printCoreConfiguration - width: parent.width / 2 + width: Math.floor(parent.width / 2) height: childrenRect.height Label { diff --git a/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml index 005d719266..7ae8520d19 100644 --- a/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml @@ -73,7 +73,7 @@ Rectangle hoverEnabled: true; // Only clickable if no printer is selected - enabled: OutputDevice.selectedPrinterName == "" + enabled: OutputDevice.selectedPrinterName == "" && printer.status !== "unreachable" } Row @@ -86,7 +86,7 @@ Rectangle Rectangle { - width: parent.width / 3 + width: Math.floor(parent.width / 3) height: parent.height Label // Print job name @@ -131,7 +131,7 @@ Rectangle Rectangle { - width: parent.width / 3 * 2 + width: Math.floor(parent.width / 3 * 2) height: parent.height Label // Friendly machine name @@ -139,7 +139,7 @@ Rectangle id: printerNameLabel anchors.top: parent.top anchors.left: parent.left - width: parent.width / 2 - UM.Theme.getSize("default_margin").width - showCameraIcon.width + width: Math.floor(parent.width / 2 - UM.Theme.getSize("default_margin").width - showCameraIcon.width) text: printer.friendly_name font: UM.Theme.getFont("default_bold") elide: Text.ElideRight @@ -149,7 +149,7 @@ Rectangle { id: printerTypeLabel anchors.top: printerNameLabel.bottom - width: parent.width / 2 - UM.Theme.getSize("default_margin").width + width: Math.floor(parent.width / 2 - UM.Theme.getSize("default_margin").width) text: printer.machine_variant anchors.left: parent.left elide: Text.ElideRight @@ -183,7 +183,7 @@ Rectangle id: extruderInfo anchors.bottom: parent.bottom - width: parent.width / 2 - UM.Theme.getSize("default_margin").width + width: Math.floor(parent.width / 2 - UM.Theme.getSize("default_margin").width) height: childrenRect.height spacing: UM.Theme.getSize("default_margin").width @@ -217,7 +217,7 @@ Rectangle anchors.right: parent.right anchors.top: parent.top height: showExtended ? parent.height: printProgressTitleBar.height - width: parent.width / 2 - UM.Theme.getSize("default_margin").width + width: Math.floor(parent.width / 2 - UM.Theme.getSize("default_margin").width) border.width: UM.Theme.getSize("default_lining").width border.color: lineColor radius: cornerRadius @@ -257,6 +257,11 @@ Rectangle return catalog.i18nc("@label:status", "Disabled"); } + if (printer.status === "unreachable") + { + return printerStatusText(printer); + } + if (printJob != null) { switch (printJob.status) @@ -327,6 +332,12 @@ Rectangle { return "blocked-icon.svg"; } + + if (printer.status === "unreachable") + { + return ""; + } + if (printJob != null) { if(printJob.status === "queued") @@ -378,6 +389,11 @@ Rectangle return catalog.i18nc("@label", "Not accepting print jobs"); } + if (printer.status === "unreachable") + { + return ""; + } + if(printJob != null) { switch (printJob.status) diff --git a/plugins/UM3NetworkPrinting/PrinterVideoStream.qml b/plugins/UM3NetworkPrinting/PrinterVideoStream.qml index fe60d30dd4..6793d74ac5 100644 --- a/plugins/UM3NetworkPrinting/PrinterVideoStream.qml +++ b/plugins/UM3NetworkPrinting/PrinterVideoStream.qml @@ -57,7 +57,7 @@ Item { id: cameraImage width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth) - height: (sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width + height: Math.floor((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width) anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter z: 1 diff --git a/plugins/UM3NetworkPrinting/UM3InfoComponents.qml b/plugins/UM3NetworkPrinting/UM3InfoComponents.qml index 2c3902dcff..d0c95e1524 100644 --- a/plugins/UM3NetworkPrinting/UM3InfoComponents.qml +++ b/plugins/UM3NetworkPrinting/UM3InfoComponents.qml @@ -115,8 +115,22 @@ Item { tooltip: catalog.i18nc("@info:tooltip", "Load the configuration of the printer into Cura") text: catalog.i18nc("@action:button", "Activate Configuration") - visible: printerConnected + visible: printerConnected && !isClusterPrinter() onClicked: manager.loadConfigurationFromPrinter() + + function isClusterPrinter() { + if(Cura.MachineManager.printerOutputDevices.length == 0) + { + return false; + } + var clusterSize = Cura.MachineManager.printerOutputDevices[0].clusterSize; + // This is not a cluster printer or the cluster it is just one printer + if(clusterSize == undefined || clusterSize == 1) + { + return false; + } + return true; + } } } diff --git a/plugins/UM3NetworkPrinting/blocked-icon.svg b/plugins/UM3NetworkPrinting/blocked-icon.svg index 03bbe24e16..eba3efdab9 100644 --- a/plugins/UM3NetworkPrinting/blocked-icon.svg +++ b/plugins/UM3NetworkPrinting/blocked-icon.svg @@ -1,3 +1,6 @@ - - + + + + + diff --git a/plugins/UserAgreementPlugin/UserAgreement.py b/plugins/UserAgreementPlugin/UserAgreement.py new file mode 100644 index 0000000000..f472b6fb13 --- /dev/null +++ b/plugins/UserAgreementPlugin/UserAgreement.py @@ -0,0 +1,53 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from UM.Extension import Extension +from UM.Preferences import Preferences +from UM.Application import Application +from UM.PluginRegistry import PluginRegistry +from UM.Logger import Logger + +from cura.CuraApplication import CuraApplication + +from PyQt5.QtQml import QQmlComponent, QQmlContext +from PyQt5.QtCore import QUrl, QObject, pyqtSlot + +import os.path + +class UserAgreement(QObject, Extension): + def __init__(self, parent = None): + super(UserAgreement, self).__init__() + self._user_agreement_window = None + self._user_agreement_context = None + Application.getInstance().engineCreatedSignal.connect(self._onEngineCreated) + Preferences.getInstance().addPreference("general/accepted_user_agreement", False) + + def _onEngineCreated(self): + if not Preferences.getInstance().getValue("general/accepted_user_agreement"): + self.showUserAgreement() + + def showUserAgreement(self): + if not self._user_agreement_window: + self.createUserAgreementWindow() + + self._user_agreement_window.show() + + @pyqtSlot(bool) + def didAgree(self, userChoice): + if userChoice: + Logger.log("i", "User agreed to the user agreement") + Preferences.getInstance().setValue("general/accepted_user_agreement", True) + self._user_agreement_window.hide() + else: + Logger.log("i", "User did NOT agree to the user agreement") + Preferences.getInstance().setValue("general/accepted_user_agreement", False) + CuraApplication.getInstance().quit() + CuraApplication.getInstance().setNeedToShowUserAgreement(False) + + def createUserAgreementWindow(self): + path = QUrl.fromLocalFile(os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), "UserAgreement.qml")) + + component = QQmlComponent(Application.getInstance()._engine, path) + self._user_agreement_context = QQmlContext(Application.getInstance()._engine.rootContext()) + self._user_agreement_context.setContextProperty("manager", self) + self._user_agreement_window = component.create(self._user_agreement_context) diff --git a/plugins/UserAgreementPlugin/UserAgreement.qml b/plugins/UserAgreementPlugin/UserAgreement.qml new file mode 100644 index 0000000000..52d35a4f44 --- /dev/null +++ b/plugins/UserAgreementPlugin/UserAgreement.qml @@ -0,0 +1,64 @@ +// Copyright (c) 2017 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.4 + +import UM 1.3 as UM + +UM.Dialog +{ + id: baseDialog + minimumWidth: Math.floor(UM.Theme.getSize("modal_window_minimum").width * 0.75) + minimumHeight: Math.floor(UM.Theme.getSize("modal_window_minimum").height * 0.5) + width: minimumWidth + height: minimumHeight + title: catalog.i18nc("@title:window", "User Agreement") + + TextArea + { + anchors.top: parent.top + width: parent.width + anchors.bottom: buttonRow.top + text: '

DISCLAIMER BY ULTIMAKER

+

PLEASE READ THIS DISCLAIMER CAREFULLY.

+

EXCEPT WHEN OTHERWISE STATED IN WRITING, ULTIMAKER PROVIDES ANY ULTIMAKER SOFTWARE OR THIRD PARTY SOFTWARE “AS IS” WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF ULTIMAKER SOFTWARE IS WITH YOU.

+

UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, IN NO EVENT WILL ULTIMAKER BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE ANY ULTIMAKER SOFTWARE OR THIRD PARTY SOFTWARE.

+ ' + readOnly: true; + textFormat: TextEdit.RichText + } + + Item + { + id: buttonRow + anchors.bottom: parent.bottom + width: parent.width + anchors.bottomMargin: UM.Theme.getSize("default_margin").height + + UM.I18nCatalog { id: catalog; name:"cura" } + + Button + { + anchors.right: parent.right + text: catalog.i18nc("@action:button", "I understand and agree") + onClicked: { + manager.didAgree(true) + } + } + + Button + { + anchors.left: parent.left + text: catalog.i18nc("@action:button", "I don't agree") + onClicked: { + manager.didAgree(false) + } + } + + } + + onClosing: { + manager.didAgree(false) + } +} diff --git a/plugins/UserAgreementPlugin/__init__.py b/plugins/UserAgreementPlugin/__init__.py new file mode 100644 index 0000000000..88cb151f9e --- /dev/null +++ b/plugins/UserAgreementPlugin/__init__.py @@ -0,0 +1,10 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from . import UserAgreement + +def getMetaData(): + return {} + +def register(app): + return {"extension": UserAgreement.UserAgreement()} diff --git a/plugins/UserAgreementPlugin/plugin.json b/plugins/UserAgreementPlugin/plugin.json new file mode 100644 index 0000000000..aa5dbb1258 --- /dev/null +++ b/plugins/UserAgreementPlugin/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "UserAgreement", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Ask the user once if he/she agrees with our license", + "api": 4, + "i18n-catalog": "cura" +} diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py b/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py index d0b78168b4..972d238921 100644 --- a/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py @@ -118,24 +118,23 @@ class VersionUpgrade27to30(VersionUpgrade): if not parser.has_section("general"): parser.add_section("general") - # Need to exclude the following names: - # - ultimaker2_plus - # - ultimaker2_go - # - ultimaker2_extended - # - ultimaker2_extended_plus - exclude_prefix_list = ["ultimaker2_plus_", - "ultimaker2_go_", - "ultimaker2_extended_", - "ultimaker2_extended_plus_"] + # The ultimaker 2 family + ultimaker2_prefix_list = ["ultimaker2_extended_", + "ultimaker2_go_", + "ultimaker2_"] + # ultimaker 2+ is a different family, so don't do anything with those + exclude_prefix_list = ["ultimaker2_extended_plus_", + "ultimaker2_plus_"] + + # set machine definition to "ultimaker2" for the custom quality profiles that can be for the ultimaker 2 family file_base_name = os.path.basename(filename) - if file_base_name.startswith("ultimaker2_"): - skip_this = False - for exclude_prefix in exclude_prefix_list: - if file_base_name.startswith(exclude_prefix): - skip_this = True - break - if not skip_this: - parser["general"]["definition"] = "ultimaker2" + is_ultimaker2_family = False + if not any(file_base_name.startswith(ep) for ep in exclude_prefix_list): + is_ultimaker2_family = any(file_base_name.startswith(ep) for ep in ultimaker2_prefix_list) + + # ultimaker2 family quality profiles used to set as "fdmprinter" profiles + if is_ultimaker2_family and parser["general"]["definition"] == "fdmprinter": + parser["general"]["definition"] = "ultimaker2" # Update version numbers parser["general"]["version"] = "2" diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py b/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py new file mode 100644 index 0000000000..4672cb1488 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py @@ -0,0 +1,141 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import configparser #To parse preference files. +import io #To serialise the preference files afterwards. + +from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. + + +# a list of all legacy "Not Supported" quality profiles +_OLD_NOT_SUPPORTED_PROFILES = [ + "um2p_pp_0.25_normal", + "um2p_tpu_0.8_normal", + "um3_bb0.4_ABS_Fast_Print", + "um3_bb0.4_ABS_Superdraft_Print", + "um3_bb0.4_CPEP_Fast_Print", + "um3_bb0.4_CPEP_Superdraft_Print", + "um3_bb0.4_CPE_Fast_Print", + "um3_bb0.4_CPE_Superdraft_Print", + "um3_bb0.4_Nylon_Fast_Print", + "um3_bb0.4_Nylon_Superdraft_Print", + "um3_bb0.4_PC_Fast_Print", + "um3_bb0.4_PLA_Fast_Print", + "um3_bb0.4_PLA_Superdraft_Print", + "um3_bb0.4_PP_Fast_Print", + "um3_bb0.4_PP_Superdraft_Print", + "um3_bb0.4_TPU_Fast_Print", + "um3_bb0.4_TPU_Superdraft_Print", + "um3_bb0.8_ABS_Fast_Print", + "um3_bb0.8_ABS_Superdraft_Print", + "um3_bb0.8_CPEP_Fast_Print", + "um3_bb0.8_CPEP_Superdraft_Print", + "um3_bb0.8_CPE_Fast_Print", + "um3_bb0.8_CPE_Superdraft_Print", + "um3_bb0.8_Nylon_Fast_Print", + "um3_bb0.8_Nylon_Superdraft_Print", + "um3_bb0.8_PC_Fast_Print", + "um3_bb0.8_PC_Superdraft_Print", + "um3_bb0.8_PLA_Fast_Print", + "um3_bb0.8_PLA_Superdraft_Print", + "um3_bb0.8_PP_Fast_Print", + "um3_bb0.8_PP_Superdraft_Print", + "um3_bb0.8_TPU_Fast_print", + "um3_bb0.8_TPU_Superdraft_Print", +] + + +class VersionUpgrade30to31(VersionUpgrade): + ## Gets the version number from a CFG file in Uranium's 3.0 format. + # + # Since the format may change, this is implemented for the 3.0 format only + # and needs to be included in the version upgrade system rather than + # globally in Uranium. + # + # \param serialised The serialised form of a CFG file. + # \return The version number stored in the CFG file. + # \raises ValueError The format of the version number in the file is + # incorrect. + # \raises KeyError The format of the file is incorrect. + def getCfgVersion(self, serialised): + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialised) + format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + return format_version * 1000000 + setting_version + + ## Upgrades a preferences file from version 3.0 to 3.1. + # + # \param serialised The serialised form of a preferences file. + # \param filename The name of the file to upgrade. + def upgradePreferences(self, serialised, filename): + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialised) + + # Update version numbers + if "general" not in parser: + parser["general"] = {} + parser["general"]["version"] = "5" + if "metadata" not in parser: + parser["metadata"] = {} + parser["metadata"]["setting_version"] = "4" + + # Re-serialise the file. + output = io.StringIO() + parser.write(output) + return [filename], [output.getvalue()] + + ## Upgrades the given instance container file from version 3.0 to 3.1. + # + # \param serialised The serialised form of the container file. + # \param filename The name of the file to upgrade. + def upgradeInstanceContainer(self, serialised, filename): + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialised) + + for each_section in ("general", "metadata"): + if not parser.has_section(each_section): + parser.add_section(each_section) + + # Update version numbers + parser["general"]["version"] = "2" + parser["metadata"]["setting_version"] = "4" + + # Re-serialise the file. + output = io.StringIO() + parser.write(output) + return [filename], [output.getvalue()] + + + ## Upgrades a container stack from version 3.0 to 3.1. + # + # \param serialised The serialised form of a container stack. + # \param filename The name of the file to upgrade. + def upgradeStack(self, serialised, filename): + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialised) + + for each_section in ("general", "metadata"): + if not parser.has_section(each_section): + parser.add_section(each_section) + + # change "not supported" quality profiles to empty because they no longer exist + if parser.has_section("containers"): + if parser.has_option("containers", "2"): + quality_profile_id = parser["containers"]["2"] + if quality_profile_id in _OLD_NOT_SUPPORTED_PROFILES: + parser["containers"]["2"] = "empty_quality" + + # Update version numbers + if "general" not in parser: + parser["general"] = {} + parser["general"]["version"] = "3" + + if "metadata" not in parser: + parser["metadata"] = {} + parser["metadata"]["setting_version"] = "4" + + # Re-serialise the file. + output = io.StringIO() + parser.write(output) + return [filename], [output.getvalue()] diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/__init__.py b/plugins/VersionUpgrade/VersionUpgrade30to31/__init__.py new file mode 100644 index 0000000000..b4b75dddf7 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade30to31/__init__.py @@ -0,0 +1,56 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from . import VersionUpgrade30to31 + +upgrade = VersionUpgrade30to31.VersionUpgrade30to31() + +def getMetaData(): + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 5000003): ("preferences", 5000004, upgrade.upgradePreferences), + + ("machine_stack", 3000003): ("machine_stack", 3000004, upgrade.upgradeStack), + ("extruder_train", 3000003): ("extruder_train", 3000004, upgrade.upgradeStack), + + ("quality_changes", 2000003): ("quality_changes", 2000004, upgrade.upgradeInstanceContainer), + ("user", 2000003): ("user", 2000004, upgrade.upgradeInstanceContainer), + ("quality", 2000003): ("quality", 2000004, upgrade.upgradeInstanceContainer), + ("definition_changes", 2000003): ("definition_changes", 2000004, upgrade.upgradeInstanceContainer), + ("variant", 2000003): ("variant", 2000004, upgrade.upgradeInstanceContainer) + }, + "sources": { + "preferences": { + "get_version": upgrade.getCfgVersion, + "location": {"."} + }, + "machine_stack": { + "get_version": upgrade.getCfgVersion, + "location": {"./machine_instances"} + }, + "extruder_train": { + "get_version": upgrade.getCfgVersion, + "location": {"./extruders"} + }, + "quality_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality"} + }, + "user": { + "get_version": upgrade.getCfgVersion, + "location": {"./user"} + }, + "definition_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./definition_changes"} + }, + "variant": { + "get_version": upgrade.getCfgVersion, + "location": {"./variants"} + } + } + } + +def register(app): + return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json b/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json new file mode 100644 index 0000000000..d80b820976 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json @@ -0,0 +1,8 @@ + { + "name": "Version Upgrade 3.0 to 3.1", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 3.0 to Cura 3.1.", + "api": 4, + "i18n-catalog": "cura" +} diff --git a/plugins/XRayView/XRayView.py b/plugins/XRayView/XRayView.py index ed8d14b8b4..35509a9715 100644 --- a/plugins/XRayView/XRayView.py +++ b/plugins/XRayView/XRayView.py @@ -56,7 +56,8 @@ class XRayView(View): # Currently the RenderPass constructor requires a size > 0 # This should be fixed in RenderPass's constructor. self._xray_pass = XRayPass.XRayPass(1, 1) - self.getRenderer().addRenderPass(self._xray_pass) + + self.getRenderer().addRenderPass(self._xray_pass) if not self._xray_composite_shader: self._xray_composite_shader = OpenGL.getInstance().createShaderProgram(os.path.join(PluginRegistry.getInstance().getPluginPath("XRayView"), "xray_composite.shader")) @@ -74,5 +75,6 @@ class XRayView(View): self._composite_pass.setCompositeShader(self._xray_composite_shader) if event.type == Event.ViewDeactivateEvent: + self.getRenderer().removeRenderPass(self._xray_pass) self._composite_pass.setLayerBindings(self._old_layer_bindings) self._composite_pass.setCompositeShader(self._old_composite_shader) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 41953d9250..86f90e8970 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -33,9 +33,10 @@ class XmlMaterialProfile(InstanceContainer): # # \param xml_version: The version number found in an XML file. # \return The corresponding setting_version. - def xmlVersionToSettingVersion(self, xml_version: str) -> int: + @classmethod + def xmlVersionToSettingVersion(cls, xml_version: str) -> int: if xml_version == "1.3": - return 3 + return CuraApplication.SettingVersion return 0 #Older than 1.3. def getInheritedFiles(self): @@ -220,10 +221,15 @@ class XmlMaterialProfile(InstanceContainer): machine_container_map[definition_id] = container + # Map machine human-readable names to IDs + product_id_map = {} + for container in registry.findDefinitionContainers(type = "machine"): + product_id_map[container.getName()] = container.getId() + for definition_id, container in machine_container_map.items(): definition = container.getDefinition() try: - product = UM.Dictionary.findKey(self.__product_id_map, definition_id) + product = UM.Dictionary.findKey(product_id_map, definition_id) except ValueError: # An unknown product id; export it anyway product = definition_id @@ -402,15 +408,16 @@ class XmlMaterialProfile(InstanceContainer): def getConfigurationTypeFromSerialized(self, serialized: str) -> Optional[str]: return "materials" - def getVersionFromSerialized(self, serialized: str) -> Optional[int]: + @classmethod + def getVersionFromSerialized(cls, serialized: str) -> Optional[int]: data = ET.fromstring(serialized) - version = 1 + version = XmlMaterialProfile.Version # get setting version if "version" in data.attrib: - setting_version = self.xmlVersionToSettingVersion(data.attrib["version"]) + setting_version = XmlMaterialProfile.xmlVersionToSettingVersion(data.attrib["version"]) else: - setting_version = self.xmlVersionToSettingVersion("1.2") + setting_version = XmlMaterialProfile.xmlVersionToSettingVersion("1.2") return version * 1000000 + setting_version @@ -504,14 +511,17 @@ class XmlMaterialProfile(InstanceContainer): elif key in self.__unmapped_settings: if key == "hardware compatible": common_compatibility = self._parseCompatibleValue(entry.text) - else: - Logger.log("d", "Unsupported material setting %s", key) self._cached_values = common_setting_values # from InstanceContainer ancestor meta_data["compatible"] = common_compatibility self.setMetaData(meta_data) self._dirty = False + # Map machine human-readable names to IDs + product_id_map = {} + for container in ContainerRegistry.getInstance().findDefinitionContainers(type = "machine"): + product_id_map[container.getName()] = container.getId() + machines = data.iterfind("./um:settings/um:machine", self.__namespaces) for machine in machines: machine_compatibility = common_compatibility @@ -532,7 +542,7 @@ class XmlMaterialProfile(InstanceContainer): identifiers = machine.iterfind("./um:machine_identifier", self.__namespaces) for identifier in identifiers: - machine_id = self.__product_id_map.get(identifier.get("product"), None) + machine_id = product_id_map.get(identifier.get("product"), None) if machine_id is None: # Lets try again with some naive heuristics. machine_id = identifier.get("product").replace(" ", "").lower() @@ -666,7 +676,9 @@ class XmlMaterialProfile(InstanceContainer): "processing temperature graph": "material_flow_temp_graph", "print cooling": "cool_fan_speed", "retraction amount": "retraction_amount", - "retraction speed": "retraction_speed" + "retraction speed": "retraction_speed", + "adhesion tendency": "material_adhesion_tendency", + "surface energy": "material_surface_energy" } __unmapped_settings = [ "hardware compatible" @@ -678,21 +690,6 @@ class XmlMaterialProfile(InstanceContainer): "GUID": "material_guid" } - # Map XML file product names to internal ids - # TODO: Move this to definition's metadata - __product_id_map = { - "Ultimaker 3": "ultimaker3", - "Ultimaker 3 Extended": "ultimaker3_extended", - "Ultimaker 2": "ultimaker2", - "Ultimaker 2+": "ultimaker2_plus", - "Ultimaker 2 Go": "ultimaker2_go", - "Ultimaker 2 Extended": "ultimaker2_extended", - "Ultimaker 2 Extended+": "ultimaker2_extended_plus", - "Ultimaker Original": "ultimaker_original", - "Ultimaker Original+": "ultimaker_original_plus", - "IMADE3D JellyBOX": "imade3d_jellybox" - } - # Map of recognised namespaces with a proper prefix. __namespaces = { "um": "http://www.ultimaker.com/material" diff --git a/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py b/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py index c882239dba..167a9f2849 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py +++ b/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py @@ -5,24 +5,16 @@ import xml.etree.ElementTree as ET from UM.VersionUpgrade import VersionUpgrade +from cura.CuraApplication import CuraApplication +from .XmlMaterialProfile import XmlMaterialProfile + class XmlMaterialUpgrader(VersionUpgrade): def getXmlVersion(self, serialized): - data = ET.fromstring(serialized) - - version = 1 - # get setting version - if "version" in data.attrib: - setting_version = self._xmlVersionToSettingVersion(data.attrib["version"]) - else: - setting_version = self._xmlVersionToSettingVersion("1.2") - - return version * 1000000 + setting_version + return XmlMaterialProfile.getVersionFromSerialized(serialized) def _xmlVersionToSettingVersion(self, xml_version: str) -> int: - if xml_version == "1.3": - return 2 - return 0 #Older than 1.3. + return XmlMaterialProfile.xmlVersionToSettingVersion(xml_version) def upgradeMaterial(self, serialised, filename): data = ET.fromstring(serialised) diff --git a/plugins/XmlMaterialProfile/__init__.py b/plugins/XmlMaterialProfile/__init__.py index 8173e9dd04..70a359ee76 100644 --- a/plugins/XmlMaterialProfile/__init__.py +++ b/plugins/XmlMaterialProfile/__init__.py @@ -19,7 +19,7 @@ def getMetaData(): "mimetype": "application/x-ultimaker-material-profile" }, "version_upgrade": { - ("materials", 1000000): ("materials", 1000003, upgrader.upgradeMaterial), + ("materials", 1000000): ("materials", 1000004, upgrader.upgradeMaterial), }, "sources": { "materials": { diff --git a/resources/definitions/builder_premium_large.def.json b/resources/definitions/builder_premium_large.def.json new file mode 100644 index 0000000000..5fc4b46c98 --- /dev/null +++ b/resources/definitions/builder_premium_large.def.json @@ -0,0 +1,117 @@ +{ + "id": "builder_premium_large", + "version": 2, + "name": "Builder Premium Large", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Builder SZ", + "manufacturer": "Builder", + "category": "Other", + "quality_definition": "builder_premium_small", + "file_formats": "text/x-gcode", + "platform": "builder_premium_platform.stl", + "platform_offset": [-126, -36, 117], + "has_machine_quality": true, + "preferred_quality": "*Normal*", + "machine_extruder_trains": + { + "0": "builder_premium_large_rear", + "1": "builder_premium_large_front" + } + }, + + + + "overrides": { + "machine_name": { "default_value": "Builder Premium Large" }, + "machine_heated_bed": { "default_value": true }, + "machine_width": { "default_value": 215 }, + "machine_height": { "default_value": 600 }, + "machine_depth": { "default_value": 205 }, + "material_diameter": { "default_value": 1.75 }, + + "infill_pattern": {"value": "'triangles'" }, + "infill_before_walls": {"value": false }, + + "default_material_print_temperature": { "value": "215" }, + "material_print_temperature_layer_0": { "value": "material_print_temperature + 5" }, + "material_standby_temperature": { "value": "material_print_temperature" }, + + "switch_extruder_retraction_speeds": {"default_value": 15 }, + "switch_extruder_retraction_speed": {"default_value": 15 }, + "switch_extruder_prime_speed": {"default_value": 15 }, + "switch_extruder_retraction_amount": {"value": 1 }, + + "speed_travel": { "value": "100" }, + "speed_layer_0": { "value": "20" }, + "speed_prime_tower": { "value": "speed_topbottom" }, + "speed_print": { "value": "40" }, + "speed_support": { "value": "speed_wall_0" }, + "speed_support_interface": { "value": "speed_topbottom" }, + "speed_topbottom": { "value": "math.ceil(speed_print * 20 / 35)" }, + "speed_wall": { "value": "math.ceil(speed_print * 30 / 40)" }, + "speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 25)" }, + "speed_wall_x": { "value": "speed_wall" }, + + "prime_tower_position_x": { "default_value": 175 }, + "prime_tower_position_y": { "default_value": 178 }, + "prime_tower_wipe_enabled": { "default_value": false }, + "prime_tower_min_volume": { "default_value": 50 }, + "dual_pre_wipe": { "default_value": false }, + + "prime_blob_enable": { "enabled": true }, + + "acceleration_enabled": { "value": "True" }, + "acceleration_layer_0": { "value": "acceleration_topbottom" }, + "acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_print": { "value": "3000" }, + "acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_support_interface": { "value": "acceleration_topbottom" }, + "acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1000 / 3000)" }, + "acceleration_travel": { "value": "acceleration_print" }, + "acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 3000)" }, + "acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 1000 / 1000)" }, + + "cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" }, + "cool_min_layer_time": { "default_value": 10 }, + + "jerk_enabled": { "value": "True" }, + "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)" }, + + "wall_thickness": { "value": "1.2" }, + + "retraction_amount": { "default_value": 3 }, + "retraction_speed": { "default_value": 15 }, + "retraction_retract_speed": { "default_value": 15 }, + "retraction_prime_speed": { "default_value": 15 }, + "travel_retract_before_outer_wall": { "default_value": true }, + "skin_overlap": { "value": "15" }, + "adhesion_type": { "default_value": "skirt" }, + "machine_nozzle_heat_up_speed": { "default_value": 2 }, + "machine_nozzle_cool_down_speed": { "default_value": 2 }, + "machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] }, + "gantry_height": { "default_value": 55 }, + "machine_max_feedrate_x": { "default_value": 300 }, + "machine_max_feedrate_y": { "default_value": 300 }, + "machine_max_feedrate_z": { "default_value": 40 }, + "machine_max_acceleration_z": { "default_value": 500 }, + "machine_acceleration": { "default_value": 1000 }, + "machine_max_jerk_xy": { "default_value": 10 }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "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 E15 ;extrude 15mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\nT0 ;Start with Rear Extruder\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\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" + }, + "machine_extruder_count": { "default_value": 2 } + } +} \ No newline at end of file diff --git a/resources/definitions/builder_premium_medium.def.json b/resources/definitions/builder_premium_medium.def.json new file mode 100644 index 0000000000..56dab8f863 --- /dev/null +++ b/resources/definitions/builder_premium_medium.def.json @@ -0,0 +1,117 @@ +{ + "id": "builder_premium_medium", + "version": 2, + "name": "Builder Premium Medium", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Builder SZ", + "manufacturer": "Builder", + "category": "Other", + "quality_definition": "builder_premium_small", + "file_formats": "text/x-gcode", + "platform": "builder_premium_platform.stl", + "platform_offset": [-126, -36, 117], + "has_machine_quality": true, + "preferred_quality": "*Normal*", + "machine_extruder_trains": + { + "0": "builder_premium_medium_rear", + "1": "builder_premium_medium_front" + } + }, + + + + "overrides": { + "machine_name": { "default_value": "Builder Premium Medium" }, + "machine_heated_bed": { "default_value": true }, + "machine_width": { "default_value": 215 }, + "machine_height": { "default_value": 400 }, + "machine_depth": { "default_value": 205 }, + "material_diameter": { "default_value": 1.75 }, + + "infill_pattern": {"value": "'triangles'" }, + "infill_before_walls": {"value": false }, + + "default_material_print_temperature": { "value": "215" }, + "material_print_temperature_layer_0": { "value": "material_print_temperature + 5" }, + "material_standby_temperature": { "value": "material_print_temperature" }, + + "switch_extruder_retraction_speeds": {"default_value": 15 }, + "switch_extruder_retraction_speed": {"default_value": 15 }, + "switch_extruder_prime_speed": {"default_value": 15 }, + "switch_extruder_retraction_amount": {"value": 1 }, + + "speed_travel": { "value": "100" }, + "speed_layer_0": { "value": "20" }, + "speed_prime_tower": { "value": "speed_topbottom" }, + "speed_print": { "value": "40" }, + "speed_support": { "value": "speed_wall_0" }, + "speed_support_interface": { "value": "speed_topbottom" }, + "speed_topbottom": { "value": "math.ceil(speed_print * 20 / 35)" }, + "speed_wall": { "value": "math.ceil(speed_print * 30 / 40)" }, + "speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 25)" }, + "speed_wall_x": { "value": "speed_wall" }, + + "prime_tower_position_x": { "default_value": 175 }, + "prime_tower_position_y": { "default_value": 178 }, + "prime_tower_wipe_enabled": { "default_value": false }, + "prime_tower_min_volume": { "default_value": 50 }, + "dual_pre_wipe": { "default_value": false }, + + "prime_blob_enable": { "enabled": true }, + + "acceleration_enabled": { "value": "True" }, + "acceleration_layer_0": { "value": "acceleration_topbottom" }, + "acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_print": { "value": "3000" }, + "acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_support_interface": { "value": "acceleration_topbottom" }, + "acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1000 / 3000)" }, + "acceleration_travel": { "value": "acceleration_print" }, + "acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 3000)" }, + "acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 1000 / 1000)" }, + + "cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" }, + "cool_min_layer_time": { "default_value": 10 }, + + "jerk_enabled": { "value": "True" }, + "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)" }, + + "wall_thickness": { "value": "1.2" }, + + "retraction_amount": { "default_value": 3 }, + "retraction_speed": { "default_value": 15 }, + "retraction_retract_speed": { "default_value": 15 }, + "retraction_prime_speed": { "default_value": 15 }, + "travel_retract_before_outer_wall": { "default_value": true }, + "skin_overlap": { "value": "15" }, + "adhesion_type": { "default_value": "skirt" }, + "machine_nozzle_heat_up_speed": { "default_value": 2 }, + "machine_nozzle_cool_down_speed": { "default_value": 2 }, + "machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] }, + "gantry_height": { "default_value": 55 }, + "machine_max_feedrate_x": { "default_value": 300 }, + "machine_max_feedrate_y": { "default_value": 300 }, + "machine_max_feedrate_z": { "default_value": 40 }, + "machine_max_acceleration_z": { "default_value": 500 }, + "machine_acceleration": { "default_value": 1000 }, + "machine_max_jerk_xy": { "default_value": 10 }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "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 E15 ;extrude 15mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\nT0 ;Start with Rear Extruder\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\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" + }, + "machine_extruder_count": { "default_value": 2 } + } +} \ No newline at end of file diff --git a/resources/definitions/builder_premium_small.def.json b/resources/definitions/builder_premium_small.def.json new file mode 100644 index 0000000000..65103ce1af --- /dev/null +++ b/resources/definitions/builder_premium_small.def.json @@ -0,0 +1,116 @@ +{ + "id": "builder_premium_small", + "version": 2, + "name": "Builder Premium Small", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Builder SZ", + "manufacturer": "Builder", + "category": "Other", + "file_formats": "text/x-gcode", + "platform": "builder_premium_platform.stl", + "platform_offset": [-126, -36, 117], + "has_machine_quality": true, + "preferred_quality": "*Normal*", + "machine_extruder_trains": + { + "0": "builder_premium_small_rear", + "1": "builder_premium_small_front" + } + }, + + + + "overrides": { + "machine_name": { "default_value": "Builder Premium Small" }, + "machine_heated_bed": { "default_value": true }, + "machine_width": { "default_value": 215 }, + "machine_height": { "default_value": 200 }, + "machine_depth": { "default_value": 205 }, + "material_diameter": { "default_value": 1.75 }, + + "infill_pattern": {"value": "'triangles'" }, + "infill_before_walls": {"value": false }, + + "default_material_print_temperature": { "value": "215" }, + "material_print_temperature_layer_0": { "value": "material_print_temperature + 5" }, + "material_standby_temperature": { "value": "material_print_temperature" }, + + "switch_extruder_retraction_speeds": {"default_value": 15 }, + "switch_extruder_retraction_speed": {"default_value": 15 }, + "switch_extruder_prime_speed": {"default_value": 15 }, + "switch_extruder_retraction_amount": {"value": 1 }, + + "speed_travel": { "value": "100" }, + "speed_layer_0": { "value": "20" }, + "speed_prime_tower": { "value": "speed_topbottom" }, + "speed_print": { "value": "40" }, + "speed_support": { "value": "speed_wall_0" }, + "speed_support_interface": { "value": "speed_topbottom" }, + "speed_topbottom": { "value": "math.ceil(speed_print * 20 / 35)" }, + "speed_wall": { "value": "math.ceil(speed_print * 30 / 40)" }, + "speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 25)" }, + "speed_wall_x": { "value": "speed_wall" }, + + "prime_tower_position_x": { "default_value": 175 }, + "prime_tower_position_y": { "default_value": 178 }, + "prime_tower_wipe_enabled": { "default_value": false }, + "prime_tower_min_volume": { "default_value": 50 }, + "dual_pre_wipe": { "default_value": false }, + + "prime_blob_enable": { "enabled": true }, + + "acceleration_enabled": { "value": "True" }, + "acceleration_layer_0": { "value": "acceleration_topbottom" }, + "acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_print": { "value": "3000" }, + "acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_support_interface": { "value": "acceleration_topbottom" }, + "acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1000 / 3000)" }, + "acceleration_travel": { "value": "acceleration_print" }, + "acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 3000)" }, + "acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 1000 / 1000)" }, + + "cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" }, + "cool_min_layer_time": { "default_value": 10 }, + + "jerk_enabled": { "value": "True" }, + "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)" }, + + "wall_thickness": { "value": "1.2" }, + + "retraction_amount": { "default_value": 3 }, + "retraction_speed": { "default_value": 15 }, + "retraction_retract_speed": { "default_value": 15 }, + "retraction_prime_speed": { "default_value": 15 }, + "travel_retract_before_outer_wall": { "default_value": true }, + "skin_overlap": { "value": "15" }, + "adhesion_type": { "default_value": "skirt" }, + "machine_nozzle_heat_up_speed": { "default_value": 2 }, + "machine_nozzle_cool_down_speed": { "default_value": 2 }, + "machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] }, + "gantry_height": { "default_value": 55 }, + "machine_max_feedrate_x": { "default_value": 300 }, + "machine_max_feedrate_y": { "default_value": 300 }, + "machine_max_feedrate_z": { "default_value": 40 }, + "machine_max_acceleration_z": { "default_value": 500 }, + "machine_acceleration": { "default_value": 1000 }, + "machine_max_jerk_xy": { "default_value": 10 }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "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 E15 ;extrude 15mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\nT0 ;Start with Rear Extruder\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\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" + }, + "machine_extruder_count": { "default_value": 2 } + } +} \ No newline at end of file diff --git a/resources/definitions/creality_cr10.def.json b/resources/definitions/creality_cr10.def.json index b570a0d3e6..bacae6e2e5 100644 --- a/resources/definitions/creality_cr10.def.json +++ b/resources/definitions/creality_cr10.def.json @@ -7,7 +7,8 @@ "visible": true, "author": "Michael Wildermuth", "manufacturer": "Creality3D", - "file_formats": "text/x-gcode" + "file_formats": "text/x-gcode", + "preferred_quality": "*Draft*" }, "overrides": { "machine_width": { @@ -25,9 +26,6 @@ "machine_nozzle_size": { "default_value": 0.4 }, - "layer_height": { - "default_value": 0.2 - }, "layer_height_0": { "default_value": 0.2 }, @@ -61,9 +59,6 @@ "skirt_gap": { "default_value": 5 }, - "machine_start_gcode": { - "default_value": "G21 ;metric values\nG90 ;absolute Positioning\nG28 ; home all axes\nG1 Z5 F3000 ; lift\nG1 X20 Y2 F1500 ; avoid binder clips\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 X120 E10 F600 ; prime nozzle\nG1 X150 F5000 ; quick wipe" - }, "machine_end_gcode": { "default_value": "G91\nG1 F1800 E-3\nG1 F3000 Z10\nG90\nG28 X0 Y0 ; home x and y axis\nM106 S0 ; turn off cooling fan\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors" }, diff --git a/resources/definitions/dagoma_discoeasy200.def.json b/resources/definitions/dagoma_discoeasy200.def.json old mode 100755 new mode 100644 diff --git a/resources/definitions/deltacomb.def.json b/resources/definitions/deltacomb.def.json new file mode 100644 index 0000000000..031bd12156 --- /dev/null +++ b/resources/definitions/deltacomb.def.json @@ -0,0 +1,66 @@ +{ + "id": "deltacomb", + "version": 2, + "name": "Deltacomb 3D", + "inherits": "fdmprinter", + "metadata": { + "author": "Gabriele Rossetti", + "visible": true, + "manufacturer": "Deltacomb 3D", + "category": "Other", + "file_formats": "text/x-gcode", + "icon": "icon_ultimaker2", + "platform": "deltacomb.stl", + "has_machine_quality": true + }, + + "overrides": { + "machine_heated_bed": { "default_value": false }, + "machine_width": { "default_value": 190 }, + "machine_height": { "default_value": 250 }, + "machine_depth": { "default_value": 190 }, + "machine_center_is_zero": { "default_value": true }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home all axes (max 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\nG28 ;Home all axes (max endstops)\nM84 ;steppers off\nG90 ;absolute positioning" }, + "machine_shape": { "default_value": "elliptic" }, + "machine_max_feedrate_x": { "default_value": 250 }, + "machine_max_feedrate_y": { "default_value": 250 }, + "machine_max_feedrate_z": { "default_value": 15 }, + "machine_max_acceleration_x": { "default_value": 10000 }, + "machine_max_acceleration_y": { "default_value": 10000 }, + "machine_max_acceleration_z": { "default_value": 50 }, + "machine_max_acceleration_e": { "default_value": 100 }, + "machine_acceleration": { "default_value": 4000 }, + "machine_max_jerk_xy": { "default_value": 25.0 }, + "machine_max_jerk_z": { "default_value": 0.4 }, + "machine_max_jerk_e": { "default_value": 1.0 }, + "retraction_hop_enabled": { "default_value": false }, + "retraction_amount" : { "default_value": 4.5 }, + "retraction_speed" : { "default_value": 40 }, + "material_diameter": { "default_value": 1.75 }, + "material_final_print_temperature": { "value": "material_print_temperature - 5" }, + "material_initial_print_temperature": { "value": "material_print_temperature" }, + "material_print_temperature_layer_0": { "value": "material_print_temperature + 5" }, + "travel_avoid_distance": { "default_value": 1, "value": 1 }, + "speed_print" : { "default_value": 70 }, + "speed_travel": { "default_value": 80, "value": 80 }, + "speed_infill": { "value": "round(speed_print * 1.05, 0)" }, + "speed_topbottom": { "value": "round(speed_print * 0.95, 0)" }, + "speed_wall": { "value": "speed_print" }, + "speed_wall_0": { "value": "round(speed_print * 0.9, 0)" }, + "speed_wall_x": { "value": "speed_wall" }, + "speed_layer_0": { "value": "min(round(speed_print * 0.75, 0), 45.0)" }, + "speed_travel_layer_0": { "value": "round(speed_travel * 0.7, 0)" }, + "skirt_brim_speed": { "value": "speed_layer_0" }, + "skirt_line_count": { "default_value": 3 }, + "skirt_brim_minimal_length": { "default_value": 150 }, + "infill_sparse_density": { "default_value": 24 }, + "top_bottom_thickness": { "default_value": 0.6 }, + "support_z_distance": { "default_value": 0.2, "value": "min(2 * layer_height, machine_nozzle_size * 0.75)" }, + "infill_before_walls" : { "default_value": false }, + "support_use_towers" : { "default_value": false } + } +} diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json old mode 100755 new mode 100644 index ca424dfd2f..b17769eba2 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -643,6 +643,20 @@ "settable_per_mesh": false, "settable_per_extruder": false }, + "slicing_tolerance": + { + "label": "Slicing Tolerance", + "description": "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process.", + "type": "enum", + "options": + { + "middle": "Middle", + "exclusive": "Exclusive", + "inclusive": "Inclusive" + }, + "default_value": "middle", + "settable_per_mesh": true + }, "line_width": { "label": "Line Width", @@ -668,6 +682,7 @@ "value": "line_width", "default_value": 0.4, "type": "float", + "limit_to_extruder": "wall_0_extruder_nr if wall_x_extruder_nr == wall_0_extruder_nr else -1", "settable_per_mesh": true, "children": { @@ -866,29 +881,45 @@ "type": "category", "children": { - "wall_0_extruder_nr": + "wall_extruder_nr": { - "label": "Outer Wall Extruder", - "description": "The extruder train used for printing the outer wall. This is used in multi-extrusion.", + "label": "Wall Extruder", + "description": "The extruder train used for printing the walls. This is used in multi-extrusion.", "type": "optional_extruder", "default_value": "-1", "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": true, "settable_globally": true, - "enabled": "machine_extruder_count > 1" - }, - "wall_x_extruder_nr": - { - "label": "Inner Walls Extruder", - "description": "The extruder train used for printing the inner walls. This is used in multi-extrusion.", - "type": "optional_extruder", - "default_value": "-1", - "settable_per_mesh": false, - "settable_per_extruder": false, - "settable_per_meshgroup": true, - "settable_globally": true, - "enabled": "machine_extruder_count > 1" + "enabled": "machine_extruder_count > 1", + "children": { + "wall_0_extruder_nr": + { + "label": "Outer Wall Extruder", + "description": "The extruder train used for printing the outer wall. This is used in multi-extrusion.", + "type": "optional_extruder", + "value": "wall_extruder_nr", + "default_value": "-1", + "settable_per_mesh": false, + "settable_per_extruder": false, + "settable_per_meshgroup": true, + "settable_globally": true, + "enabled": "machine_extruder_count > 1" + }, + "wall_x_extruder_nr": + { + "label": "Inner Wall Extruder", + "description": "The extruder train used for printing the inner walls. This is used in multi-extrusion.", + "type": "optional_extruder", + "value": "wall_extruder_nr", + "default_value": "-1", + "settable_per_mesh": false, + "settable_per_extruder": false, + "settable_per_meshgroup": true, + "settable_globally": true, + "enabled": "machine_extruder_count > 1" + } + } }, "wall_thickness": { @@ -1354,7 +1385,7 @@ "default_value": 2, "minimum_value": "0", "minimum_value_warning": "infill_line_width", - "value": "0 if infill_sparse_density == 0 else (infill_line_width * 100) / infill_sparse_density * (2 if infill_pattern == 'grid' else (3 if infill_pattern == 'triangles' or infill_pattern == 'cubic' or infill_pattern == 'cubicsubdiv' else (2 if infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' else (1 if infill_pattern == 'cross' or infill_pattern == 'cross_3d' else 1))))", + "value": "0 if infill_sparse_density == 0 else (infill_line_width * 100) / infill_sparse_density * (2 if infill_pattern == 'grid' else (3 if infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'cubicsubdiv' else (2 if infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' else (1 if infill_pattern == 'cross' or infill_pattern == 'cross_3d' else 1))))", "limit_to_extruder": "infill_extruder_nr", "settable_per_mesh": true } @@ -1363,13 +1394,14 @@ "infill_pattern": { "label": "Infill Pattern", - "description": "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, cubic, octet, quarter cubic and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction.", + "description": "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, tri-hexagon, cubic, octet, quarter cubic, cross and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction.", "type": "enum", "options": { "grid": "Grid", "lines": "Lines", "triangles": "Triangles", + "trihexagon": "Tri-Hexagon", "cubic": "Cubic", "cubicsubdiv": "Cubic Subdivision", "tetrahedral": "Octet", @@ -1850,6 +1882,31 @@ "settable_per_mesh": false, "settable_per_extruder": true }, + "material_adhesion_tendency": + { + "label": "Adhesion Tendency", + "description": "Surface adhesion tendency.", + "type": "int", + "default_value": 10, + "minimum_value": "0", + "maximum_value": "10", + "enabled": false, + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "material_surface_energy": + { + "label": "Surface Energy", + "description": "Surface energy.", + "unit": "%", + "type": "int", + "default_value": 100, + "minimum_value": "0", + "maximum_value": "100", + "enabled": false, + "settable_per_mesh": false, + "settable_per_extruder": true + }, "material_flow": { "label": "Flow", @@ -4075,30 +4132,6 @@ "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" }, - "z_offset_layer_0": - { - "label": "Initial Layer Z Offset", - "description": "The extruder is offset from the normal height of the first layer by this amount. It can be positive (raised) or negative (lowered). Some filament types adhere to the build plate better if the extruder is raised slightly.", - "unit": "mm", - "type": "float", - "default_value": 0, - "minimum_value_warning": "0", - "maximum_value_warning": "layer_height_0", - "enabled": "resolveOrValue('adhesion_type') != 'raft'", - "settable_per_mesh": false, - "settable_per_extruder": false - }, - "z_offset_taper_layers": - { - "label": "Z Offset Taper Layers", - "description": "When non-zero, the Z offset is reduced to 0 over that many layers. A value of 0 means that the Z offset remains constant for all the layers in the print.", - "type": "int", - "default_value": 0, - "minimum_value": "0", - "enabled": "resolveOrValue('adhesion_type') != 'raft' and z_offset_layer_0 != 0", - "settable_per_mesh": false, - "settable_per_extruder": false - }, "raft_margin": { "label": "Raft Extra Margin", @@ -4827,6 +4860,16 @@ "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": true + }, + "remove_empty_first_layers": + { + "label": "Remove Empty First Layers", + "description": "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle.", + "type": "bool", + "default_value": true, + "enabled": "not support_enable", + "settable_per_mesh": false, + "settable_per_extruder": false } } }, @@ -5032,7 +5075,8 @@ "default_value": false, "settable_per_mesh": true }, - "support_skip_some_zags": { + "support_skip_some_zags": + { "label": "Break Up Support In Chunks", "description": "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern.", "type": "bool", @@ -5040,35 +5084,36 @@ "enabled": "support_enable and (support_pattern == 'zigzag')", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, + "settable_per_extruder": true + }, + "support_skip_zag_per_mm": + { + "label": "Support Chunk Size", + "description": "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away.", + "type": "float", + "unit": "mm", + "default_value": 20, + "minimum_value": "0", + "minimum_value_warning": "support_line_distance", + "enabled": "support_enable and (support_pattern == 'zigzag') and support_skip_some_zags", + "limit_to_extruder": "support_infill_extruder_nr", + "settable_per_mesh": false, "settable_per_extruder": true, - "children": { - "support_skip_zag_per_mm": { - "label": "Support Chunk Size", - "description": "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away.", - "type": "float", - "unit": "mm", - "default_value": 20, - "minimum_value": "0", - "minimum_value_warning": "support_line_distance", + "children": + { + "support_zag_skip_count": + { + "label": "Support Chunk Line Count", + "description": "Skip one in every N connection lines to make the support structure easier to break away.", + "type": "int", + "default_value": 5, + "value": "round(support_skip_zag_per_mm / support_line_distance)", + "minimum_value": "1", + "minimum_value_warning": "3", "enabled": "support_enable and (support_pattern == 'zigzag') and support_skip_some_zags", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, - "settable_per_extruder": true, - "children": { - "support_zag_skip_count": { - "label": "Support Chunk Line Count", - "description": "Skip one in every N connection lines to make the support structure easier to break away.", - "type": "int", - "default_value": 5, - "value": "round(support_skip_zag_per_mm / support_line_distance)", - "minimum_value": "1", - "minimum_value_warning": "3", - "enabled": "support_enable and (support_pattern == 'zigzag') and support_skip_some_zags", - "limit_to_extruder": "support_infill_extruder_nr", - "settable_per_mesh": false, - "settable_per_extruder": true - } - } + "settable_per_extruder": true } } }, diff --git a/resources/definitions/helloBEEprusa.def.json b/resources/definitions/helloBEEprusa.def.json old mode 100755 new mode 100644 diff --git a/resources/definitions/prusa_i3_mk2.def.json b/resources/definitions/prusa_i3_mk2.def.json index ef3ef8159e..c8c2cc1363 100644 --- a/resources/definitions/prusa_i3_mk2.def.json +++ b/resources/definitions/prusa_i3_mk2.def.json @@ -5,7 +5,7 @@ "inherits": "fdmprinter", "metadata": { "visible": true, - "author": "Apsu", + "author": "Apsu, Nounours2099", "manufacturer": "Prusa Research", "file_formats": "text/x-gcode", "icon": "icon_ultimaker2", @@ -41,7 +41,7 @@ "machine_max_jerk_e": { "default_value": 2.5 }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ; set units to millimeters\nG90 ; use absolute positioning\nM82 ; absolute extrusion mode\nM104 S{material_print_temperature} ; set extruder temp\nM140 S{material_bed_temperature} ; set bed temp\nM190 S{material_bed_temperature} ; wait for bed temp\nM109 S{material_print_temperature} ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG92 E0.0 ; reset extruder distance position\nG1 Y-3.0 F1000.0 ; go outside print area\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E21.5 F1000.0 ; intro line\nG92 E0.0 ; reset extruder distance position" + "default_value": "G21 ; set units to millimeters\nG90 ; use absolute positioning\nM82 ; absolute extrusion mode\nM104 S{material_print_temperature_layer_0} ; set extruder temp\nM140 S{material_bed_temperature_layer_0} ; set bed temp\nM190 S{material_bed_temperature_layer_0} ; wait for bed temp\nM109 S{material_print_temperature_layer_0} ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG92 E0.0 ; reset extruder distance position\nG1 Y-3.0 F1000.0 ; go outside print area\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E21.5 F1000.0 ; intro line\nG92 E0.0 ; reset extruder distance position" }, "machine_end_gcode": { "default_value": "M104 S0 ; turn off extruder\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y210; home X axis and push Y forward\nM84 ; disable motors" diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 2f4ad4e1a8..05e39e365c 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -67,7 +67,7 @@ "machine_extruder_count": { "default_value": 2 }, "extruder_prime_pos_abs": { "default_value": true }, "machine_start_gcode": { "default_value": "" }, - "machine_end_gcode": { "default_value": "G91 ;Relative movement\nG0 F2400 Z3 E-{retraction_amount}\nG90 ;Disable relative movement" }, + "machine_end_gcode": { "default_value": "G91 ;Relative movement\nG0 F15000 X8.0 Z0.5 E-4.5 ;Wiping+material retraction\nG0 F10000 Z1.5 E4.5 ;Compensation for the retraction\nG90 ;Disable relative movement" }, "prime_tower_position_x": { "value": "machine_depth - 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')) - 30" }, "prime_tower_wipe_enabled": { "default_value": false }, @@ -150,7 +150,7 @@ "top_bottom_thickness": { "value": "1" }, "travel_avoid_distance": { "value": "3" }, "wall_0_inset": { "value": "0" }, - "wall_line_width_x": { "value": "round(line_width * 0.3 / 0.35, 2)" }, + "wall_line_width_x": { "value": "round(wall_line_width * 0.3 / 0.35, 2)" }, "wall_thickness": { "value": "1" } } } diff --git a/resources/definitions/vertex_delta_k8800.def.json b/resources/definitions/vertex_delta_k8800.def.json index b832620942..0a89b61b36 100644 --- a/resources/definitions/vertex_delta_k8800.def.json +++ b/resources/definitions/vertex_delta_k8800.def.json @@ -10,6 +10,9 @@ "author": "Velleman" }, "overrides": { + "material_diameter": { + "default_value": 1.75 + }, "machine_width": { "default_value": 200 }, @@ -40,7 +43,7 @@ "machine_head_shape_max_y": { "default_value": 0 }, - "machine_nozzle_gantry_distance": { + "gantry_height": { "default_value": 0 }, "machine_nozzle_offset_x_1": { diff --git a/resources/extruders/builder_premium_large_front.def.json b/resources/extruders/builder_premium_large_front.def.json new file mode 100644 index 0000000000..159682dc1c --- /dev/null +++ b/resources/extruders/builder_premium_large_front.def.json @@ -0,0 +1,27 @@ +{ + "id": "builder_premium_large_front", + "version": 2, + "name": "Front Extruder", + "inherits": "fdmextruder", + "metadata": { + "machine": "builder_premium_large", + "position": "1" + }, + + "overrides": { + "extruder_nr": { + "default_value": 1, + "maximum_value": "1" + }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + + "machine_extruder_start_pos_abs": { "default_value": true }, + "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, + "machine_extruder_end_pos_abs": { "default_value": true }, + "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, + "extruder_prime_pos_abs": { "default_value": true } + } +} diff --git a/resources/extruders/builder_premium_large_rear.def.json b/resources/extruders/builder_premium_large_rear.def.json new file mode 100644 index 0000000000..5e9cc062ae --- /dev/null +++ b/resources/extruders/builder_premium_large_rear.def.json @@ -0,0 +1,27 @@ +{ + "id": "builder_premium_large_rear", + "version": 2, + "name": "Rear Extruder", + "inherits": "fdmextruder", + "metadata": { + "machine": "builder_premium_large", + "position": "0" + }, + + "overrides": { + "extruder_nr": { + "default_value": 0, + "maximum_value": "1" + }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + + "machine_extruder_start_pos_abs": { "default_value": true }, + "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, + "machine_extruder_end_pos_abs": { "default_value": true }, + "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, + "extruder_prime_pos_abs": { "default_value": true } + } +} diff --git a/resources/extruders/builder_premium_medium_front.def.json b/resources/extruders/builder_premium_medium_front.def.json new file mode 100644 index 0000000000..9a330b4f4b --- /dev/null +++ b/resources/extruders/builder_premium_medium_front.def.json @@ -0,0 +1,27 @@ +{ + "id": "builder_premium_medium_front", + "version": 2, + "name": "Front Extruder", + "inherits": "fdmextruder", + "metadata": { + "machine": "builder_premium_medium", + "position": "1" + }, + + "overrides": { + "extruder_nr": { + "default_value": 1, + "maximum_value": "1" + }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + + "machine_extruder_start_pos_abs": { "default_value": true }, + "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, + "machine_extruder_end_pos_abs": { "default_value": true }, + "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, + "extruder_prime_pos_abs": { "default_value": true } + } +} diff --git a/resources/extruders/builder_premium_medium_rear.def.json b/resources/extruders/builder_premium_medium_rear.def.json new file mode 100644 index 0000000000..49d4734306 --- /dev/null +++ b/resources/extruders/builder_premium_medium_rear.def.json @@ -0,0 +1,27 @@ +{ + "id": "builder_premium_medium_rear", + "version": 2, + "name": "Rear Extruder", + "inherits": "fdmextruder", + "metadata": { + "machine": "builder_premium_medium", + "position": "0" + }, + + "overrides": { + "extruder_nr": { + "default_value": 0, + "maximum_value": "1" + }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + + "machine_extruder_start_pos_abs": { "default_value": true }, + "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, + "machine_extruder_end_pos_abs": { "default_value": true }, + "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, + "extruder_prime_pos_abs": { "default_value": true } + } +} diff --git a/resources/extruders/builder_premium_small_front.def.json b/resources/extruders/builder_premium_small_front.def.json new file mode 100644 index 0000000000..2e6293d153 --- /dev/null +++ b/resources/extruders/builder_premium_small_front.def.json @@ -0,0 +1,27 @@ +{ + "id": "builder_premium_small_front", + "version": 2, + "name": "Front Extruder", + "inherits": "fdmextruder", + "metadata": { + "machine": "builder_premium_small", + "position": "1" + }, + + "overrides": { + "extruder_nr": { + "default_value": 1, + "maximum_value": "1" + }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + + "machine_extruder_start_pos_abs": { "default_value": true }, + "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, + "machine_extruder_end_pos_abs": { "default_value": true }, + "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, + "extruder_prime_pos_abs": { "default_value": true } + } +} diff --git a/resources/extruders/builder_premium_small_rear.def.json b/resources/extruders/builder_premium_small_rear.def.json new file mode 100644 index 0000000000..d1606cdd79 --- /dev/null +++ b/resources/extruders/builder_premium_small_rear.def.json @@ -0,0 +1,27 @@ +{ + "id": "builder_premium_small_rear", + "version": 2, + "name": "Rear Extruder", + "inherits": "fdmextruder", + "metadata": { + "machine": "builder_premium_small", + "position": "0" + }, + + "overrides": { + "extruder_nr": { + "default_value": 0, + "maximum_value": "1" + }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + + "machine_extruder_start_pos_abs": { "default_value": true }, + "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, + "machine_extruder_end_pos_abs": { "default_value": true }, + "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, + "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, + "extruder_prime_pos_abs": { "default_value": true } + } +} diff --git a/resources/extruders/hBp_extruder_left.def.json b/resources/extruders/hBp_extruder_left.def.json old mode 100755 new mode 100644 diff --git a/resources/extruders/hBp_extruder_right.def.json b/resources/extruders/hBp_extruder_right.def.json old mode 100755 new mode 100644 diff --git a/resources/i18n/cura.pot b/resources/i18n/cura.pot index 9135cfc381..99ccd7a459 100644 --- a/resources/i18n/cura.pot +++ b/resources/i18n/cura.pot @@ -18,6 +18,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +#Manually added for plugins/UserAgreementPlugin/UserAgreement.qml +msgctxt "@title:window" +msgid "User Agreement" +msgstr "" + +#Manually added for plugins/UserAgreementPlugin/UserAgreement.qml +msgctxt "@action:button" +msgid "I understand and agree" +msgstr "" + +#Manually added for plugins/UserAgreementPlugin/UserAgreement.qml +msgctxt "@action:button" +msgid "I don't agree" +msgstr "" + #: Manually added for plugins/UM3NetworkPrinting/PrinterInfoBlock.qml msgctxt "@label:status" msgid "Print aborted" @@ -63,6 +78,21 @@ msgctxt "@info:status" msgid "Print finished" msgstr "" +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index 1323070dbe..179994a4a6 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -36,6 +36,46 @@ msgctxt "@label:status" msgid "Can't start print" msgstr "Druck startet nicht" +#: Manually added for plugins/UM3NetworkPrinting/DiscoverUM3Action.qml +msgctxt "@label" +msgid "This printer is not set up to host a group of Ultimaker 3 printers." +msgstr "Dieser Drucker ist nicht eingerichtet um eine Gruppe von Ultimaker 3 Druckern anzusteuern." + +#: Manually added for plugins/UM3NetworkPrinting/PrinterInfoBlock.qml +msgctxt "@label" +msgid "Finishes at: " +msgstr "Endet um: " + +#: Manually added for plugins/UM3NetworkPrinting/DiscoverUM3Action.qml +msgctxt "@label" +msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +msgstr "Dieser Drucker steuert eine Gruppe von %1 Ultimaker 3 Druckern an." + +#: Manually added for plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py +msgctxt "@info:status" +msgid "Printer '{printer_name}' has finished printing '{job_name}'." +msgstr "Drucker '{printer_name}' hat '{job_name}' vollständig gedrückt." + +#: Manually added for plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py +msgctxt "@info:status" +msgid "Print finished" +msgstr "Druck vollendet" + +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "&Plugins" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "Plugins durchsuchen..." + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "Installierte plugins..." + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" @@ -2479,7 +2519,7 @@ msgstr "Sichtbarkeit einstellen" #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:44 msgctxt "@label:textbox" msgid "Check all" -msgstr "Alle prüfen" +msgstr "Alles wählen" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:40 msgctxt "@info:status" diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index fe88603c5e..f8f379d3d9 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -61,6 +61,21 @@ msgctxt "@info:status" msgid "Print finished" msgstr "Impresión terminada" +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "&Complementos" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "Examinar complementos..." + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "Complementos instalados..." + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index 6c4dc4fdc8..ae60ff98c6 100644 --- a/resources/i18n/fi_FI/cura.po +++ b/resources/i18n/fi_FI/cura.po @@ -61,6 +61,21 @@ msgctxt "@info:status" msgid "Print finished" msgstr "Tulosta valmis" +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "&Lisäosat" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "Selaa lisäosia..." + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "Asennetut lisäoset..." + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index 5724cb3192..76ad2ae4a6 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -61,6 +61,21 @@ msgctxt "@info:status" msgid "Print finished" msgstr "Impression terminée" +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "&Plug-ins" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "Parcourir les plug-ins..." + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "Plug-ins installés..." + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index ec85f0c2c8..7354379afa 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -61,6 +61,21 @@ msgctxt "@info:status" msgid "Print finished" msgstr "Stampa finita" +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "&Plugin" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "Sfoglia plugin..." + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "Plugin installati..." + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index c43d557c71..680106d321 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -61,6 +61,21 @@ msgctxt "@info:status" msgid "Print finished" msgstr "Print klaar" +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "&Plugins" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "Door invoegtoepassingen bladeren..." + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "Geïnstalleerde plugins..." + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index 9021cbcdde..fd840d9fc2 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -63,6 +63,21 @@ msgctxt "@info:status" msgid "Print finished" msgstr "Drukowanie zakończone" +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "W&tyczki" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "Przeglądaj wtyczki..." + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "Zainstalowane wtyczki..." + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index 868fe5e552..db4aa72f0b 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -62,6 +62,21 @@ msgctxt "@info:status" msgid "Print finished" msgstr "Impressão Concluída" +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "&Complementos" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "Navegar complementos..." + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "Complementos instalados..." + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po index 7fe9e17073..34f7262a1f 100755 --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -63,6 +63,21 @@ msgctxt "@info:status" msgid "Print finished" msgstr "Печать завершена" +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "Плагины" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "Просмотр плагинов..." + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "Установленные плагины..." + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index dca9e1ce86..129c2bbe6b 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -61,6 +61,21 @@ msgctxt "@info:status" msgid "Print finished" msgstr "Baskı tamamlandı" +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "&Eklentiler" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "Eklentilere göz at..." + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "Yüklü eklentiler..." + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index 98357b94dc..092ce5120b 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -63,6 +63,21 @@ msgctxt "@info:status" msgid "Print finished" msgstr "打印完成" +#: Manually added for resources/Cura/Cura.qml +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "插件" + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "浏览插件..." + +#: Manually added for resources/Cura/Actions.qml +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "已安装插件..." + #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 msgctxt "@action" msgid "Machine Settings" diff --git a/resources/meshes/BEEVERYCREATIVE-helloBEEprusa.stl b/resources/meshes/BEEVERYCREATIVE-helloBEEprusa.stl old mode 100755 new mode 100644 diff --git a/resources/meshes/builder_premium_platform.stl b/resources/meshes/builder_premium_platform.stl new file mode 100644 index 0000000000..b315d4b6d4 Binary files /dev/null and b/resources/meshes/builder_premium_platform.stl differ diff --git a/resources/meshes/deltacomb.stl b/resources/meshes/deltacomb.stl new file mode 100644 index 0000000000..7be5c33fd7 Binary files /dev/null and b/resources/meshes/deltacomb.stl differ diff --git a/resources/qml/AboutDialog.qml b/resources/qml/AboutDialog.qml index 534f0d016c..36cebe594a 100644 --- a/resources/qml/AboutDialog.qml +++ b/resources/qml/AboutDialog.qml @@ -132,6 +132,7 @@ UM.Dialog projectsModel.append({ name:"PySerial", description: catalog.i18nc("@label", "Serial communication library"), license: "Python", url: "http://pyserial.sourceforge.net/" }); projectsModel.append({ name:"python-zeroconf", description: catalog.i18nc("@label", "ZeroConf discovery library"), license: "LGPL", url: "https://github.com/jstasiak/python-zeroconf" }); projectsModel.append({ name:"Clipper", description: catalog.i18nc("@label", "Polygon clipping library"), license: "Boost", url: "http://www.angusj.com/delphi/clipper.php" }); + projectsModel.append({ name:"Requests", description: catalog.i18nc("@Label", "Python HTTP library"), license: "GPL", url: "http://docs.python-requests.org" }); projectsModel.append({ name:"Open Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://fonts.google.com/specimen/Open+Sans" }); projectsModel.append({ name:"Font-Awesome-SVG-PNG", description: catalog.i18nc("@label", "SVG icons"), license: "SIL OFL 1.1", url: "https://github.com/encharm/Font-Awesome-SVG-PNG" }); diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml old mode 100755 new mode 100644 diff --git a/resources/qml/AskOpenAsProjectOrModelsDialog.qml b/resources/qml/AskOpenAsProjectOrModelsDialog.qml index 450ec0ea26..a53c711f9d 100644 --- a/resources/qml/AskOpenAsProjectOrModelsDialog.qml +++ b/resources/qml/AskOpenAsProjectOrModelsDialog.qml @@ -63,11 +63,12 @@ UM.Dialog anchors.fill: parent anchors.leftMargin: 20 * screenScaleFactor anchors.rightMargin: 20 * screenScaleFactor - anchors.bottomMargin: 20 * screenScaleFactor + anchors.bottomMargin: 10 * screenScaleFactor spacing: 10 * screenScaleFactor Label { + id: questionText text: catalog.i18nc("@text:window", "This is a Cura project file. Would you like to open it as a project or import the models from it?") anchors.left: parent.left anchors.right: parent.right @@ -80,11 +81,18 @@ UM.Dialog id: rememberChoiceCheckBox text: catalog.i18nc("@text:window", "Remember my choice") checked: UM.Preferences.getValue("cura/choice_on_open_project") != "always_ask" + style: CheckBoxStyle { + label: Label { + text: control.text + font: UM.Theme.getFont("default") + } + } } // Buttons Item { + id: buttonBar anchors.right: parent.right anchors.left: parent.left height: childrenRect.height diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml old mode 100755 new mode 100644 index ca32a6eaab..2fd19a8a03 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -16,7 +16,7 @@ UM.MainWindow { id: base //: Cura application window title - title: catalog.i18nc("@title:window","Cura"); + title: catalog.i18nc("@title:window","Ultimaker Cura"); viewportRect: Qt.rect(0, 0, (base.width - sidebar.width) / base.width, 1.0) property bool showPrintMonitor: false @@ -894,6 +894,11 @@ UM.MainWindow if(!base.visible) { base.visible = true; + } + + // check later if the user agreement dialog has been closed + if (CuraApplication.needToShowUserAgreement) + { restart(); } else if(Cura.MachineManager.activeMachineId == null || Cura.MachineManager.activeMachineId == "") diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml index 5e892a34bc..c701e5ebf4 100644 --- a/resources/qml/JobSpecs.qml +++ b/resources/qml/JobSpecs.qml @@ -94,7 +94,7 @@ Item { { id: printJobTextfield anchors.right: printJobPencilIcon.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width/2 + anchors.rightMargin: Math.floor(UM.Theme.getSize("default_margin").width/2) height: UM.Theme.getSize("jobspecs_line").height width: Math.max(__contentWidth + UM.Theme.getSize("default_margin").width, 50) maximumLength: 120 diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml old mode 100755 new mode 100644 diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index 1688bc228a..d3ecfb69fe 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -14,6 +14,20 @@ Menu property int extruderIndex: 0 property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 + property bool isClusterPrinter: + { + if(Cura.MachineManager.printerOutputDevices.length == 0) + { + return false; + } + var clusterSize = Cura.MachineManager.printerOutputDevices[0].clusterSize; + // This is not a cluster printer or the cluster it is just one printer + if(clusterSize == undefined || clusterSize == 1) + { + return false; + } + return true; + } UM.SettingPropertyProvider { @@ -29,14 +43,14 @@ Menu id: automaticMaterial text: { - if(printerConnected && Cura.MachineManager.printerOutputDevices[0].materialNames.length > extruderIndex) + if(printerConnected && Cura.MachineManager.printerOutputDevices[0].materialNames.length > extruderIndex && !isClusterPrinter) { var materialName = Cura.MachineManager.printerOutputDevices[0].materialNames[extruderIndex]; return catalog.i18nc("@title:menuitem %1 is the automatically selected material", "Automatic: %1").arg(materialName); } return ""; } - visible: printerConnected && Cura.MachineManager.printerOutputDevices[0].materialNames.length > extruderIndex + visible: printerConnected && Cura.MachineManager.printerOutputDevices[0].materialNames.length > extruderIndex && !isClusterPrinter onTriggered: { var materialId = Cura.MachineManager.printerOutputDevices[0].materialIds[extruderIndex]; diff --git a/resources/qml/Menus/NozzleMenu.qml b/resources/qml/Menus/NozzleMenu.qml index b51b3b1907..e9f2df1f38 100644 --- a/resources/qml/Menus/NozzleMenu.qml +++ b/resources/qml/Menus/NozzleMenu.qml @@ -14,20 +14,34 @@ Menu property int extruderIndex: 0 property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 + property bool isClusterPrinter: + { + if(Cura.MachineManager.printerOutputDevices.length == 0) + { + return false; + } + var clusterSize = Cura.MachineManager.printerOutputDevices[0].clusterSize; + // This is not a cluster printer or the cluster it is just one printer + if(clusterSize == undefined || clusterSize == 1) + { + return false; + } + return true; + } MenuItem { id: automaticNozzle text: { - if(printerConnected && Cura.MachineManager.printerOutputDevices[0].hotendIds.length > extruderIndex) + if(printerConnected && Cura.MachineManager.printerOutputDevices[0].hotendIds.length > extruderIndex && !isClusterPrinter) { var nozzleName = Cura.MachineManager.printerOutputDevices[0].hotendIds[extruderIndex]; return catalog.i18nc("@title:menuitem %1 is the nozzle currently loaded in the printer", "Automatic: %1").arg(nozzleName); } return ""; } - visible: printerConnected && Cura.MachineManager.printerOutputDevices[0].hotendIds.length > extruderIndex + visible: printerConnected && Cura.MachineManager.printerOutputDevices[0].hotendIds.length > extruderIndex && !isClusterPrinter onTriggered: { var activeExtruderIndex = ExtruderManager.activeExtruderIndex; diff --git a/resources/qml/Menus/ProfileMenu.qml b/resources/qml/Menus/ProfileMenu.qml index 17eb7cfb1d..fecea5ef99 100644 --- a/resources/qml/Menus/ProfileMenu.qml +++ b/resources/qml/Menus/ProfileMenu.qml @@ -17,9 +17,9 @@ Menu MenuItem { - text: model.name + " - " + model.layer_height + text: (model.layer_height != "") ? model.name + " - " + model.layer_height : model.name checkable: true - checked: Cura.MachineManager.activeQualityChangesId == "" && Cura.MachineManager.activeQualityType == model.metadata.quality_type + checked: Cura.MachineManager.activeQualityId == model.id exclusiveGroup: group onTriggered: Cura.MachineManager.setActiveQuality(model.id) visible: model.available diff --git a/resources/qml/OpenFilesIncludingProjectsDialog.qml b/resources/qml/OpenFilesIncludingProjectsDialog.qml index c8df7b69a2..af8fb9e05f 100644 --- a/resources/qml/OpenFilesIncludingProjectsDialog.qml +++ b/resources/qml/OpenFilesIncludingProjectsDialog.qml @@ -36,8 +36,6 @@ UM.Dialog var meshName = backgroundItem.getMeshName(projectFile.toString()); backgroundItem.hasMesh(decodeURIComponent(meshName)); - // always update the job name with the loaded project - PrintInformation.setBaseName(meshName); } function loadModelFiles(fileUrls) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml old mode 100755 new mode 100644 diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml index 4bf4b44aed..ce169ba714 100644 --- a/resources/qml/PrintMonitor.qml +++ b/resources/qml/PrintMonitor.qml @@ -442,6 +442,7 @@ Column anchors.leftMargin: UM.Theme.getSize("setting_unit_margin").width anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter + renderType: Text.NativeRendering Component.onCompleted: { @@ -676,6 +677,341 @@ Column watchedProperties: ["value"] } + Column + { + visible: connectedPrinter != null ? connectedPrinter.canControlManually : false + enabled: + { + if (connectedPrinter == null) + { + return false; //Can't control the printer if not connected. + } + if (!connectedPrinter.acceptsCommands) + { + return false; //Not allowed to do anything. + } + if (connectedPrinter.jobState == "printing" || connectedPrinter.jobState == "resuming" || connectedPrinter.jobState == "pausing" || connectedPrinter.jobState == "error" || connectedPrinter.jobState == "offline") + { + return false; //Printer is in a state where it can't react to manual control + } + return true; + } + + Loader + { + sourceComponent: monitorSection + property string label: catalog.i18nc("@label", "Printer control") + } + + Row + { + width: base.width - 2 * UM.Theme.getSize("default_margin").width + height: childrenRect.height + UM.Theme.getSize("default_margin").width + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + + spacing: UM.Theme.getSize("default_margin").width + + Label + { + text: catalog.i18nc("@label", "Jog Position") + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + + width: Math.floor(parent.width * 0.4) - UM.Theme.getSize("default_margin").width + height: UM.Theme.getSize("setting_control").height + verticalAlignment: Text.AlignVCenter + } + + GridLayout + { + columns: 3 + rows: 4 + rowSpacing: UM.Theme.getSize("default_lining").width + columnSpacing: UM.Theme.getSize("default_lining").height + + Label + { + text: catalog.i18nc("@label", "X/Y") + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + width: height + height: UM.Theme.getSize("setting_control").height + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + + Layout.row: 1 + Layout.column: 2 + Layout.preferredWidth: width + Layout.preferredHeight: height + } + + Button + { + Layout.row: 2 + Layout.column: 2 + Layout.preferredWidth: width + Layout.preferredHeight: height + iconSource: UM.Theme.getIcon("arrow_top"); + style: monitorButtonStyle + width: height + height: UM.Theme.getSize("setting_control").height + + onClicked: + { + connectedPrinter.moveHead(0, distancesRow.currentDistance, 0) + } + } + + Button + { + Layout.row: 3 + Layout.column: 1 + Layout.preferredWidth: width + Layout.preferredHeight: height + iconSource: UM.Theme.getIcon("arrow_left"); + style: monitorButtonStyle + width: height + height: UM.Theme.getSize("setting_control").height + + onClicked: + { + connectedPrinter.moveHead(-distancesRow.currentDistance, 0, 0) + } + } + + Button + { + Layout.row: 3 + Layout.column: 3 + Layout.preferredWidth: width + Layout.preferredHeight: height + iconSource: UM.Theme.getIcon("arrow_right"); + style: monitorButtonStyle + width: height + height: UM.Theme.getSize("setting_control").height + + onClicked: + { + connectedPrinter.moveHead(distancesRow.currentDistance, 0, 0) + } + } + + Button + { + Layout.row: 4 + Layout.column: 2 + Layout.preferredWidth: width + Layout.preferredHeight: height + iconSource: UM.Theme.getIcon("arrow_bottom"); + style: monitorButtonStyle + width: height + height: UM.Theme.getSize("setting_control").height + + onClicked: + { + connectedPrinter.moveHead(0, -distancesRow.currentDistance, 0) + } + } + + Button + { + Layout.row: 3 + Layout.column: 2 + Layout.preferredWidth: width + Layout.preferredHeight: height + iconSource: UM.Theme.getIcon("home"); + style: monitorButtonStyle + width: height + height: UM.Theme.getSize("setting_control").height + + onClicked: + { + connectedPrinter.homeHead() + } + } + } + + + Column + { + spacing: UM.Theme.getSize("default_lining").height + + Label + { + text: catalog.i18nc("@label", "Z") + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + width: UM.Theme.getSize("section").height + height: UM.Theme.getSize("setting_control").height + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + } + + Button + { + iconSource: UM.Theme.getIcon("arrow_top"); + style: monitorButtonStyle + width: height + height: UM.Theme.getSize("setting_control").height + + onClicked: + { + connectedPrinter.moveHead(0, 0, distancesRow.currentDistance) + } + } + + Button + { + iconSource: UM.Theme.getIcon("home"); + style: monitorButtonStyle + width: height + height: UM.Theme.getSize("setting_control").height + + onClicked: + { + connectedPrinter.homeBed() + } + } + + Button + { + iconSource: UM.Theme.getIcon("arrow_bottom"); + style: monitorButtonStyle + width: height + height: UM.Theme.getSize("setting_control").height + + onClicked: + { + connectedPrinter.moveHead(0, 0, -distancesRow.currentDistance) + } + } + } + } + + Row + { + id: distancesRow + + width: base.width - 2 * UM.Theme.getSize("default_margin").width + height: childrenRect.height + UM.Theme.getSize("default_margin").width + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + + spacing: UM.Theme.getSize("default_margin").width + + property real currentDistance: 10 + + Label + { + text: catalog.i18nc("@label", "Jog Distance") + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + + width: Math.floor(parent.width * 0.4) - UM.Theme.getSize("default_margin").width + height: UM.Theme.getSize("setting_control").height + verticalAlignment: Text.AlignVCenter + } + + Row + { + Repeater + { + model: distancesModel + delegate: Button + { + height: UM.Theme.getSize("setting_control").height + width: height + UM.Theme.getSize("default_margin").width + + text: model.label + exclusiveGroup: distanceGroup + checkable: true + checked: distancesRow.currentDistance == model.value + onClicked: distancesRow.currentDistance = model.value + + style: ButtonStyle { + background: Rectangle { + border.width: control.checked ? UM.Theme.getSize("default_lining").width * 2 : UM.Theme.getSize("default_lining").width + border.color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_border"); + } + else if (control.checked || control.pressed) + { + return UM.Theme.getColor("action_button_active_border"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered_border"); + } + return UM.Theme.getColor("action_button_border"); + } + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled"); + } + else if (control.checked || control.pressed) + { + return UM.Theme.getColor("action_button_active"); + } + else if (control.hovered) + { + return UM.Theme.getColor("action_button_hovered"); + } + return UM.Theme.getColor("action_button"); + } + Behavior on color { ColorAnimation { duration: 50; } } + Label { + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + anchors.leftMargin: UM.Theme.getSize("default_lining").width * 2 + anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2 + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_text"); + } + else if (control.checked || control.pressed) + { + return UM.Theme.getColor("action_button_active_text"); + } + else if (control.hovered) + { + return UM.Theme.getColor("action_button_hovered_text"); + } + return UM.Theme.getColor("action_button_text"); + } + font: UM.Theme.getFont("default") + text: control.text + horizontalAlignment: Text.AlignHCenter + elide: Text.ElideMiddle + } + } + label: Item { } + } + } + } + } + } + + ListModel + { + id: distancesModel + ListElement { label: "0.1"; value: 0.1 } + ListElement { label: "1"; value: 1 } + ListElement { label: "10"; value: 10 } + ListElement { label: "100"; value: 100 } + } + ExclusiveGroup { id: distanceGroup } + } + + Loader { sourceComponent: monitorSection @@ -753,4 +1089,86 @@ Column } } } + + Component + { + id: monitorButtonStyle + + ButtonStyle + { + background: Rectangle + { + border.width: UM.Theme.getSize("default_lining").width + border.color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_border"); + } + else if(control.pressed) + { + return UM.Theme.getColor("action_button_active_border"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered_border"); + } + return UM.Theme.getColor("action_button_border"); + } + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled"); + } + else if(control.pressed) + { + return UM.Theme.getColor("action_button_active"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered"); + } + return UM.Theme.getColor("action_button"); + } + Behavior on color + { + ColorAnimation + { + duration: 50 + } + } + } + + label: Item + { + UM.RecolorImage + { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + width: Math.floor(control.width / 2) + height: Math.floor(control.height / 2) + sourceSize.width: width + sourceSize.height: width + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_text"); + } + else if(control.pressed) + { + return UM.Theme.getColor("action_button_active_text"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered_text"); + } + return UM.Theme.getColor("action_button_text"); + } + source: control.iconSource + } + } + } + } } \ No newline at end of file diff --git a/resources/qml/SaveButton.qml b/resources/qml/SaveButton.qml index 7423fc2368..e2890a6b49 100644 --- a/resources/qml/SaveButton.qml +++ b/resources/qml/SaveButton.qml @@ -18,6 +18,8 @@ Item { property var backend: CuraApplication.getBackend(); property bool activity: CuraApplication.platformActivity; + property alias buttonRowWidth: saveRow.width + property string fileBaseName property string statusText: { @@ -89,17 +91,30 @@ Item { Item { id: saveRow - width: base.width + width: { + // using childrenRect.width directly causes a binding loop, because setting the width affects the childrenRect + var children_width = UM.Theme.getSize("default_margin").width; + for (var index in children) + { + var child = children[index]; + if(child.visible) + { + children_width += child.width + child.anchors.rightMargin; + } + } + return Math.min(children_width, base.width - UM.Theme.getSize("sidebar_margin").width); + } height: saveToButton.height - anchors.top: progressBar.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.left: parent.left + anchors.bottom: parent.bottom + anchors.bottomMargin: UM.Theme.getSize("sidebar_margin").height + anchors.right: parent.right + clip: true Row { id: additionalComponentsRow anchors.top: parent.top anchors.right: saveToButton.visible ? saveToButton.left : parent.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width + anchors.rightMargin: UM.Theme.getSize("default_margin").width spacing: UM.Theme.getSize("default_margin").width } diff --git a/resources/qml/Settings/SettingTextField.qml b/resources/qml/Settings/SettingTextField.qml index 5259df5876..2cf54d09f4 100644 --- a/resources/qml/Settings/SettingTextField.qml +++ b/resources/qml/Settings/SettingTextField.qml @@ -11,6 +11,14 @@ SettingItem id: base property var focusItem: input + property string textBeforeEdit + property bool textHasChanged + onFocusReceived: + { + textHasChanged = false; + textBeforeEdit = focusItem.text; + } + contents: Rectangle { id: control @@ -102,6 +110,7 @@ SettingItem right: parent.right verticalCenter: parent.verticalCenter } + renderType: Text.NativeRendering Keys.onTabPressed: { @@ -114,12 +123,22 @@ SettingItem Keys.onReleased: { - propertyProvider.setPropertyValue("value", text) + if (text != textBeforeEdit) + { + textHasChanged = true; + } + if (textHasChanged) + { + propertyProvider.setPropertyValue("value", text) + } } onEditingFinished: { - propertyProvider.setPropertyValue("value", text) + if (textHasChanged) + { + propertyProvider.setPropertyValue("value", text) + } } onActiveFocusChanged: diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 56fd789564..c116fa933a 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -51,27 +51,34 @@ Item { id: globalProfileSelection - text: { - var result = Cura.MachineManager.activeQualityName; - if (Cura.MachineManager.activeQualityLayerHeight > 0) { - result += " "; - result += " - "; - result += Cura.MachineManager.activeQualityLayerHeight + "mm"; - result += ""; - } - return result; - } + text: generateActiveQualityText() enabled: !header.currentExtruderVisible || header.currentExtruderIndex > -1 - width: Math.floor(parent.width * 0.55) height: UM.Theme.getSize("setting_control").height anchors.left: globalProfileLabel.right anchors.right: parent.right tooltip: Cura.MachineManager.activeQualityName style: UM.Theme.styles.sidebar_header_button - activeFocusOnPress: true; + activeFocusOnPress: true menu: ProfileMenu { } + function generateActiveQualityText () { + var result = catalog.i18nc("@", "No Profile Available") // default text + + if (Cura.MachineManager.isActiveQualitySupported ) { + result = Cura.MachineManager.activeQualityName + + if (Cura.MachineManager.activeQualityLayerHeight > 0) { + result += " " + result += " - " + result += Cura.MachineManager.activeQualityLayerHeight + "mm" + result += "" + } + } + + return result + } + UM.SimpleButton { id: customisedSettings diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml old mode 100755 new mode 100644 index bc8c1834d8..4c4d30b043 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -29,6 +29,7 @@ Rectangle property variant printMaterialLengths: PrintInformation.materialLengths property variant printMaterialWeights: PrintInformation.materialWeights property variant printMaterialCosts: PrintInformation.materialCosts + property variant printMaterialNames: PrintInformation.materialNames color: UM.Theme.getColor("sidebar") UM.I18nCatalog { id: catalog; name:"cura"} @@ -151,7 +152,7 @@ Rectangle Button { height: settingsModeSelection.height anchors.left: parent.left - anchors.leftMargin: model.index * (settingsModeSelection.width / 2) + anchors.leftMargin: model.index * Math.floor(settingsModeSelection.width / 2) anchors.verticalCenter: parent.verticalCenter width: Math.floor(0.5 * parent.width) text: model.text @@ -275,31 +276,32 @@ Rectangle anchors.bottomMargin: Math.floor(UM.Theme.getSize("sidebar_margin").height * 2 + UM.Theme.getSize("progressbar").height + UM.Theme.getFont("default_bold").pixelSize) } - Rectangle + Item { id: printSpecs anchors.left: parent.left anchors.bottom: parent.bottom anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width anchors.bottomMargin: UM.Theme.getSize("sidebar_margin").height - height: timeDetails.height + timeSpecDescription.height + lengthSpec.height + height: timeDetails.height + costSpec.height + width: base.width - (saveButton.buttonRowWidth + UM.Theme.getSize("sidebar_margin").width) visible: !monitoringPrint + clip: true Label { id: timeDetails anchors.left: parent.left - anchors.bottom: timeSpecDescription.top + anchors.bottom: costSpec.top font: UM.Theme.getFont("large") color: UM.Theme.getColor("text_subtext") text: (!base.printDuration || !base.printDuration.valid) ? catalog.i18nc("@label Hours and minutes", "00h 00min") : base.printDuration.getDisplayString(UM.DurationFormat.Short) MouseArea { - id: infillMouseArea + id: timeDetailsMouseArea anchors.fill: parent hoverEnabled: true - //enabled: base.settingsEnabled onEntered: { @@ -307,19 +309,35 @@ Rectangle if(base.printDuration.valid && !base.printDuration.isTotalDurationZero) { // All the time information for the different features is achieved - var print_time = PrintInformation.getFeaturePrintTimes() + var print_time = PrintInformation.getFeaturePrintTimes(); + var total_seconds = parseInt(base.printDuration.getDisplayString(UM.DurationFormat.Seconds)) // A message is created and displayed when the user hover the time label - var content = catalog.i18nc("@tooltip", "Time information") + var content = catalog.i18nc("@tooltip", "Time specification
"); for(var feature in print_time) { if(!print_time[feature].isTotalDurationZero) { - content += "
" + feature + ": " + print_time[feature].getDisplayString(UM.DurationFormat.Short) + var feature_name = ""; + + if (feature.length <= 11) + { + feature_name = feature + } + else{ + feature_name = feature.substring(0, 8) + "..." + } + + + content += ""; } } + content += "
" + feature_name + ":" + + "  " + print_time[feature].getDisplayString(UM.DurationFormat.Short) + + "  " + Math.round(100 * parseInt(print_time[feature].getDisplayString(UM.DurationFormat.Seconds)) / total_seconds) + "%" + + "
"; - base.showTooltip(parent, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), content) + base.showTooltip(parent, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), content); } } onExited: @@ -331,20 +349,84 @@ Rectangle Label { - id: timeSpecDescription - anchors.left: parent.left - anchors.bottom: lengthSpec.top - font: UM.Theme.getFont("very_small") - color: UM.Theme.getColor("text_subtext") - text: catalog.i18nc("@description", "Print time") - } - Label - { - id: lengthSpec + + function getSpecsData(){ + + var lengths = []; + var total_length = 0; + var weights = []; + var total_weight = 0; + var costs = []; + var total_cost = 0; + var some_costs_known = false; + var names = []; + if(base.printMaterialLengths) { + for(var index = 0; index < base.printMaterialLengths.length; index++) + { + if(base.printMaterialLengths[index] > 0) + { + names.push(base.printMaterialNames[index]); + lengths.push(base.printMaterialLengths[index].toFixed(2)); + weights.push(String(Math.floor(base.printMaterialWeights[index]))); + var cost = base.printMaterialCosts[index] == undefined ? 0 : base.printMaterialCosts[index].toFixed(2); + costs.push(cost); + if(cost > 0) + { + some_costs_known = true; + } + + total_length += base.printMaterialLengths[index]; + total_weight += base.printMaterialWeights[index]; + total_cost += base.printMaterialCosts[index]; + } + } + } + if(lengths.length == 0) + { + lengths = ["0.00"]; + weights = ["0"]; + costs = ["0.00"]; + } + + var tooltip_html = "%1
".arg(catalog.i18nc("@label", "Cost specification")); + for(var index = 0; index < lengths.length; index++) + { + var item_strings = [ + "%1:".arg(names[index]), + catalog.i18nc("@label m for meter", "%1m").arg(lengths[index]), + catalog.i18nc("@label g for grams", "%1g").arg(weights[index]), + "%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(costs[index]), + ]; + tooltip_html += ""; + for(var item = 0; item < item_strings.length; item++) { + tooltip_html += "".arg(item_strings[item]); + } + } + var item_strings = [ + catalog.i18nc("@label", "Total:"), + catalog.i18nc("@label m for meter", "%1m").arg(total_length.toFixed(2)), + catalog.i18nc("@label g for grams", "%1g").arg(Math.round(total_weight)), + "%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(total_cost.toFixed(2)), + ]; + tooltip_html += ""; + for(var item = 0; item < item_strings.length; item++) { + tooltip_html += "".arg(item_strings[item]); + } + tooltip_html += "
%1  
%1  
"; + tooltipText = tooltip_html; + + + return tooltipText + } + + id: costSpec anchors.left: parent.left anchors.bottom: parent.bottom font: UM.Theme.getFont("very_small") color: UM.Theme.getColor("text_subtext") + elide: Text.ElideMiddle + width: parent.width + property string tooltipText text: { var lengths = []; @@ -383,6 +465,27 @@ Rectangle return catalog.i18nc("@label Print estimates: m for meters, g for grams", "%1m / ~ %2g").arg(lengths.join(" + ")).arg(weights.join(" + ")); } } + MouseArea + { + id: costSpecMouseArea + anchors.fill: parent + hoverEnabled: true + + onEntered: + { + + if(base.printDuration.valid && !base.printDuration.isTotalDurationZero) + { + var show_data = costSpec.getSpecsData() + + base.showTooltip(parent, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), show_data); + } + } + onExited: + { + base.hideTooltip(); + } + } } } diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml index aa0f8a3f38..78e21f3a68 100644 --- a/resources/qml/SidebarHeader.qml +++ b/resources/qml/SidebarHeader.qml @@ -34,20 +34,6 @@ Column width: height } - Item - { - anchors - { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - visible: extruderSelectionRow.visible - height: UM.Theme.getSize("default_lining").hieght - width: height - } - Item { id: extruderSelectionRow @@ -259,42 +245,36 @@ Column color: UM.Theme.getColor("text"); } - ToolButton { + ToolButton + { id: materialSelection + text: Cura.MachineManager.activeMaterialName tooltip: Cura.MachineManager.activeMaterialName visible: Cura.MachineManager.hasMaterials - property var valueError: - { - var data = Cura.ContainerManager.getContainerMetaDataEntry(Cura.MachineManager.activeMaterialId, "compatible") - if(data == "False") - { - return true - } - else - { - return false - } - - } - property var valueWarning: ! Cura.MachineManager.isActiveQualitySupported - enabled: !extrudersList.visible || base.currentExtruderIndex > -1 - height: UM.Theme.getSize("setting_control").height width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width anchors.right: parent.right style: UM.Theme.styles.sidebar_header_button activeFocusOnPress: true; + menu: MaterialMenu { + extruderIndex: base.currentExtruderIndex + } - menu: MaterialMenu { extruderIndex: base.currentExtruderIndex } + property var valueError: !isMaterialSupported() + property var valueWarning: ! Cura.MachineManager.isActiveQualitySupported + + function isMaterialSupported () { + return Cura.ContainerManager.getContainerMetaDataEntry(Cura.MachineManager.activeMaterialId, "compatible") == "True" + } } } - // Print core row + //Variant row Item { - id: printCoreRow + id: variantRow height: UM.Theme.getSize("sidebar_setup").height visible: Cura.MachineManager.hasVariants && !sidebar.monitoringPrint && !sidebar.hideSettings @@ -308,7 +288,7 @@ Column Label { - id: printCoreLabel + id: variantLabel text: Cura.MachineManager.activeDefinitionVariantsName; width: Math.floor(parent.width * 0.45 - UM.Theme.getSize("default_margin").width) font: UM.Theme.getFont("default"); @@ -316,7 +296,7 @@ Column } ToolButton { - id: printCoreSelection + id: variantSelection text: Cura.MachineManager.activeVariantName tooltip: Cura.MachineManager.activeVariantName; visible: Cura.MachineManager.hasVariants diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 595d42d67d..549d203c4d 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -7,7 +7,7 @@ import QtQuick.Controls.Styles 1.1 import QtQuick.Layouts 1.1 import UM 1.2 as UM -import Cura 1.0 as Cura +import Cura 1.2 as Cura Item { @@ -76,12 +76,13 @@ Item property var totalTicks: 0 property var availableTotalTicks: 0 - property var activeQualityIndex: 0 + property var existingQualityProfile: 0 + property var qualitySliderActiveIndex: 0 property var qualitySliderStepWidth: 0 - property var qualitySliderAvailableMin : 0 - property var qualitySliderAvailableMax : 0 - property var qualitySliderMarginRight : 0 + property var qualitySliderAvailableMin: 0 + property var qualitySliderAvailableMax: 0 + property var qualitySliderMarginRight: 0 function update () { reset() @@ -89,15 +90,23 @@ Item var availableMin = -1 var availableMax = -1 - for (var i = 0; i <= Cura.ProfilesModel.rowCount(); i++) { + for (var i = 0; i < Cura.ProfilesModel.rowCount(); i++) { var qualityItem = Cura.ProfilesModel.getItem(i) // Add each quality item to the UI quality model qualityModel.append(qualityItem) // Set selected value - if (Cura.MachineManager.activeQualityId == qualityItem.id) { - qualityModel.activeQualityIndex = i + if (Cura.MachineManager.activeQualityType == qualityItem.metadata.quality_type) { + + // set to -1 when switching to user created profile so all ticks are clickable + if (Cura.SimpleModeSettingsManager.isProfileUserCreated) { + qualityModel.qualitySliderActiveIndex = -1 + } else { + qualityModel.qualitySliderActiveIndex = i + } + + qualityModel.existingQualityProfile = 1 } // Set min available @@ -141,16 +150,10 @@ Item function reset () { qualityModel.clear() qualityModel.availableTotalTicks = -1 + qualityModel.existingQualityProfile = 0 // check, the ticks count cannot be less than zero - if(Cura.ProfilesModel.rowCount() != 0) - { - qualityModel.totalTicks = Cura.ProfilesModel.rowCount() - 1 // minus one, because slider starts from 0 - } - else - { - qualityModel.totalTicks = 0 - } + qualityModel.totalTicks = Math.max(0, Cura.ProfilesModel.rowCount() - 1) } } @@ -175,7 +178,7 @@ Item { anchors.verticalCenter: parent.verticalCenter anchors.top: parent.top - anchors.topMargin: Math.floor(UM.Theme.getSize("sidebar_margin").height / 2) + anchors.topMargin: parseInt(UM.Theme.getSize("sidebar_margin").height / 2) color: (Cura.MachineManager.activeMachine != null && Cura.ProfilesModel.getItem(index).available) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") text: { @@ -194,13 +197,13 @@ Item // Make sure the text aligns correctly with each tick if (qualityModel.totalTicks == 0) { // If there is only one tick, align it centrally - return Math.floor(((base.width * 0.55) - width) / 2) + return parseInt(((base.width * 0.55) - width) / 2) } else if (index == 0) { return (base.width * 0.55 / qualityModel.totalTicks) * index } else if (index == qualityModel.totalTicks) { return (base.width * 0.55 / qualityModel.totalTicks) * index - width } else { - return Math.floor((base.width * 0.55 / qualityModel.totalTicks) * index - (width / 2)) + return parseInt((base.width * 0.55 / qualityModel.totalTicks) * index - (width / 2)) } } } @@ -260,7 +263,7 @@ Item id: qualitySlider height: UM.Theme.getSize("sidebar_margin").height anchors.bottom: speedSlider.bottom - enabled: qualityModel.availableTotalTicks > 0 + enabled: qualityModel.availableTotalTicks > 0 && !Cura.SimpleModeSettingsManager.isProfileCustomized visible: qualityModel.totalTicks > 0 updateValueWhileDragging : false @@ -268,7 +271,7 @@ Item maximumValue: qualityModel.qualitySliderAvailableMax >= 0 ? qualityModel.qualitySliderAvailableMax : 0 stepSize: 1 - value: qualityModel.activeQualityIndex + value: qualityModel.qualitySliderActiveIndex width: qualityModel.qualitySliderStepWidth * qualityModel.availableTotalTicks @@ -291,23 +294,40 @@ Item implicitWidth: 10 * screenScaleFactor implicitHeight: implicitWidth radius: implicitWidth / 2 + visible: !Cura.SimpleModeSettingsManager.isProfileCustomized && !Cura.SimpleModeSettingsManager.isProfileUserCreated && qualityModel.existingQualityProfile } } } onValueChanged: { - // Only change if an active machine is set and the slider is visible at all. - if(Cura.MachineManager.activeMachine != null && visible) - { - //Prevent updating during view initializing. Trigger only if the value changed by user - if(qualitySlider.value != qualityModel.activeQualityIndex) - { - //start updating with short delay - qualitySliderChangeTimer.start(); + // only change if an active machine is set and the slider is visible at all. + if (Cura.MachineManager.activeMachine != null && visible) { + // prevent updating during view initializing. Trigger only if the value changed by user + if (qualitySlider.value != qualityModel.qualitySliderActiveIndex) { + // start updating with short delay + qualitySliderChangeTimer.start() } } } } + + MouseArea + { + id: speedSliderMouseArea + anchors.fill: parent + hoverEnabled: true + enabled: Cura.SimpleModeSettingsManager.isProfileUserCreated + + onEntered: + { + var content = catalog.i18nc("@tooltip","A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab") + base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("sidebar_margin").width, customisedSettings.height), content) + } + onExited: + { + base.hideTooltip(); + } + } } Label @@ -316,13 +336,10 @@ Item anchors.top: speedSlider.bottom anchors.left: parent.left - anchors.right: speedSlider.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width text: catalog.i18nc("@label", "Print Speed") font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") - elide: Text.ElideRight } Label @@ -346,6 +363,33 @@ Item color: (qualityModel.availableTotalTicks > 0) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") horizontalAlignment: Text.AlignRight } + + UM.SimpleButton + { + id: customisedSettings + + visible: Cura.SimpleModeSettingsManager.isProfileCustomized + height: speedSlider.height * 0.8 + width: speedSlider.height * 0.8 + + anchors.verticalCenter: speedSlider.verticalCenter + anchors.right: speedSlider.left + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width / 2 + + color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button"); + iconSource: UM.Theme.getIcon("reset"); + + onClicked: + { + discardOrKeepProfileChangesDialog.show() + } + onEntered: + { + var content = catalog.i18nc("@tooltip","You have modified some profile settings. If you want to change these go to custom mode.") + base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("sidebar_margin").width, customisedSettings.height), content) + } + onExited: base.hideTooltip() + } } @@ -361,7 +405,7 @@ Item anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 2 anchors.left: parent.left - width: Math.floor(UM.Theme.getSize("sidebar").width * .45 - UM.Theme.getSize("sidebar_margin").width) + width: parseInt(UM.Theme.getSize("sidebar").width * .45 - UM.Theme.getSize("sidebar_margin").width) Label { @@ -371,7 +415,7 @@ Item color: UM.Theme.getColor("text") anchors.top: parent.top - anchors.topMargin: Math.floor(UM.Theme.getSize("sidebar_margin").height * 1.7) + anchors.topMargin: parseInt(UM.Theme.getSize("sidebar_margin").height * 1.7) anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width } @@ -382,7 +426,7 @@ Item id: infillCellRight height: infillSlider.height + UM.Theme.getSize("sidebar_margin").height + enableGradualInfillCheckBox.visible * (enableGradualInfillCheckBox.height + UM.Theme.getSize("sidebar_margin").height) - width: Math.floor(UM.Theme.getSize("sidebar").width * .55) + width: parseInt(UM.Theme.getSize("sidebar").width * .55) anchors.left: infillCellLeft.right anchors.top: infillCellLeft.top @@ -393,10 +437,10 @@ Item //anchors.top: parent.top anchors.left: infillSlider.left - anchors.leftMargin: Math.floor((infillSlider.value / infillSlider.stepSize) * (infillSlider.width / (infillSlider.maximumValue / infillSlider.stepSize)) - 10 * screenScaleFactor) + anchors.leftMargin: parseInt((infillSlider.value / infillSlider.stepSize) * (infillSlider.width / (infillSlider.maximumValue / infillSlider.stepSize)) - 10 * screenScaleFactor) anchors.right: parent.right - text: Math.floor(infillDensity.properties.value) + "%" + text: parseInt(infillDensity.properties.value) + "%" horizontalAlignment: Text.AlignLeft color: infillSlider.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") @@ -406,7 +450,7 @@ Item Binding { target: infillSlider property: "value" - value: Math.floor(infillDensity.properties.value) + value: parseInt(infillDensity.properties.value) } Slider @@ -419,7 +463,7 @@ Item anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width height: UM.Theme.getSize("sidebar_margin").height - width: Math.floor(infillCellRight.width - UM.Theme.getSize("sidebar_margin").width - style.handleWidth) + width: parseInt(infillCellRight.width - UM.Theme.getSize("sidebar_margin").width - style.handleWidth) minimumValue: 0 maximumValue: 100 @@ -427,15 +471,15 @@ Item tickmarksEnabled: true // disable slider when gradual support is enabled - enabled: Math.floor(infillSteps.properties.value) == 0 + enabled: parseInt(infillSteps.properties.value) == 0 // set initial value from stack - value: Math.floor(infillDensity.properties.value) + value: parseInt(infillDensity.properties.value) onValueChanged: { // Don't round the value if it's already the same - if (Math.floor(infillDensity.properties.value) == infillSlider.value) { + if (parseInt(infillDensity.properties.value) == infillSlider.value) { return } @@ -504,7 +548,7 @@ Item anchors.right: parent.right anchors.top: parent.top - anchors.topMargin: Math.floor(UM.Theme.getSize("sidebar_margin").height / 2) + anchors.topMargin: parseInt(UM.Theme.getSize("sidebar_margin").height / 2) // we loop over all density icons and only show the one that has the current density and steps Repeater @@ -515,8 +559,8 @@ Item property int activeIndex: { for (var i = 0; i < infillModel.count; i++) { - var density = Math.floor(infillDensity.properties.value) - var steps = Math.floor(infillSteps.properties.value) + var density = parseInt(infillDensity.properties.value) + var steps = parseInt(infillSteps.properties.value) var infillModelItem = infillModel.get(i) if (density >= infillModelItem.percentageMin @@ -555,13 +599,13 @@ Item property alias _hovered: enableGradualInfillMouseArea.containsMouse anchors.top: infillSlider.bottom - anchors.topMargin: Math.floor(UM.Theme.getSize("sidebar_margin").height / 2) // closer to slider since it belongs to the same category + anchors.topMargin: parseInt(UM.Theme.getSize("sidebar_margin").height / 2) // closer to slider since it belongs to the same category anchors.left: infillCellRight.left style: UM.Theme.styles.checkbox enabled: base.settingsEnabled visible: infillSteps.properties.enabled == "True" - checked: Math.floor(infillSteps.properties.value) > 0 + checked: parseInt(infillSteps.properties.value) > 0 MouseArea { id: enableGradualInfillMouseArea @@ -570,18 +614,18 @@ Item hoverEnabled: true enabled: true - property var previousInfillDensity: Math.floor(infillDensity.properties.value) + property var previousInfillDensity: parseInt(infillDensity.properties.value) onClicked: { // Set to 90% only when enabling gradual infill - if (Math.floor(infillSteps.properties.value) == 0) { - previousInfillDensity = Math.floor(infillDensity.properties.value) + if (parseInt(infillSteps.properties.value) == 0) { + previousInfillDensity = parseInt(infillDensity.properties.value) infillDensity.setPropertyValue("value", String(90)) } else { infillDensity.setPropertyValue("value", String(previousInfillDensity)) } - infillSteps.setPropertyValue("value", (Math.floor(infillSteps.properties.value) == 0) ? 5 : 0) + infillSteps.setPropertyValue("value", (parseInt(infillSteps.properties.value) == 0) ? 5 : 0) } onEntered: { @@ -597,7 +641,7 @@ Item Label { id: gradualInfillLabel anchors.left: enableGradualInfillCheckBox.right - anchors.leftMargin: Math.floor(UM.Theme.getSize("sidebar_margin").width / 2) + anchors.leftMargin: parseInt(UM.Theme.getSize("sidebar_margin").width / 2) text: catalog.i18nc("@label", "Enable gradual") font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") @@ -658,14 +702,17 @@ Item visible: enableSupportCheckBox.visible anchors.top: infillCellRight.bottom - anchors.topMargin: Math.floor(UM.Theme.getSize("sidebar_margin").height * 1.5) + anchors.topMargin: parseInt(UM.Theme.getSize("sidebar_margin").height * 1.5) anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width + anchors.right: infillCellLeft.right + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width anchors.verticalCenter: enableSupportCheckBox.verticalCenter text: catalog.i18nc("@label", "Generate Support"); font: UM.Theme.getFont("default"); color: UM.Theme.getColor("text"); + elide: Text.ElideRight } CheckBox @@ -711,10 +758,13 @@ Item visible: supportExtruderCombobox.visible anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width + anchors.right: infillCellLeft.right + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width anchors.verticalCenter: supportExtruderCombobox.verticalCenter text: catalog.i18nc("@label", "Support Extruder"); font: UM.Theme.getFont("default"); color: UM.Theme.getColor("text"); + elide: Text.ElideRight } ComboBox @@ -867,7 +917,7 @@ Item { id: tipsCell anchors.top: adhesionCheckBox.visible ? adhesionCheckBox.bottom : (enableSupportCheckBox.visible ? supportExtruderCombobox.bottom : infillCellRight.bottom) - anchors.topMargin: Math.floor(UM.Theme.getSize("sidebar_margin").height * 2) + anchors.topMargin: parseInt(UM.Theme.getSize("sidebar_margin").height * 2) anchors.left: parent.left width: parent.width height: tipsText.contentHeight * tipsText.lineCount @@ -898,35 +948,6 @@ Item storeIndex: 0 } - Binding - { - target: infillDensity - property: "containerStackId" - value: { - - // not settable per extruder or there only is global, so we must pick global - if (machineExtruderCount.properties.value == 1) { - return Cura.MachineManager.activeStackId - } - - // return the ID of the extruder when the infill is limited to an extruder - if (infillInheritStackProvider.properties.limit_to_extruder != null && infillInheritStackProvider.properties.limit_to_extruder >= 0) { - return ExtruderManager.extruderIds[String(infillInheritStackProvider.properties.limit_to_extruder)] - } - - // default to the global stack - return Cura.MachineManager.activeStackId - } - } - - UM.SettingPropertyProvider - { - id: infillInheritStackProvider - containerStackId: Cura.MachineManager.activeMachineId - key: "infill_sparse_density" - watchedProperties: [ "limit_to_extruder" ] - } - UM.SettingPropertyProvider { id: infillDensity diff --git a/resources/qml/SidebarTooltip.qml b/resources/qml/SidebarTooltip.qml index 60d01dd6f6..07b95777b5 100644 --- a/resources/qml/SidebarTooltip.qml +++ b/resources/qml/SidebarTooltip.qml @@ -54,6 +54,7 @@ UM.PointingRectangle { rightMargin: UM.Theme.getSize("tooltip_margins").width; } wrapMode: Text.Wrap; + textFormat: Text.RichText font: UM.Theme.getFont("default"); color: UM.Theme.getColor("tooltip_text"); } diff --git a/resources/qml/Toolbar.qml b/resources/qml/Toolbar.qml index f32a5edc6f..77ffc7f2a9 100644 --- a/resources/qml/Toolbar.qml +++ b/resources/qml/Toolbar.qml @@ -30,7 +30,8 @@ Item id: repeat model: UM.ToolModel { } - + width: childrenRect.width + height: childrenRect.height Button { text: model.name @@ -72,6 +73,8 @@ Item Repeater { id: extruders + width: childrenRect.width + height: childrenRect.height property var _model: Cura.ExtrudersModel { id: extrudersModel } model: _model.items.length > 1 ? _model : 0 ExtruderButton { extruder: model } diff --git a/resources/qml/Topbar.qml b/resources/qml/Topbar.qml index 35f6aa7c3e..c69c786d5a 100644 --- a/resources/qml/Topbar.qml +++ b/resources/qml/Topbar.qml @@ -30,9 +30,11 @@ Rectangle Component.onCompleted: { startMonitoringPrint.connect(function () { base.monitoringPrint = true + UM.Controller.disableModelRendering() }) stopMonitoringPrint.connect(function () { base.monitoringPrint = false + UM.Controller.enableModelRendering() }) } @@ -279,7 +281,8 @@ Rectangle property var buttonTarget: Qt.point(viewModeButton.x + viewModeButton.width / 2, viewModeButton.y + viewModeButton.height / 2) - height: childrenRect.height; + height: childrenRect.height + width: childrenRect.width source: UM.ActiveView.valid ? UM.ActiveView.activeViewPanel : ""; } diff --git a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg index 6be4578649..32550d86a5 100644 --- a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla weight = -1 quality_type = normal -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg index d3df991d53..2007785719 100644 --- a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] layer_height = 0.1 diff --git a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg index 326e35e251..dba0a0460f 100644 --- a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg index 140a59db3b..11892a6223 100644 --- a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla weight = -1 quality_type = normal -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg index dfa265d360..852efe699e 100644 --- a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] layer_height = 0.1 diff --git a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg index 81fbf2a42d..244d544c80 100644 --- a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg index b8d8f019cd..a2d802a3ba 100644 --- a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla weight = -1 quality_type = normal -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/abax_titan/atitan_pla_high.inst.cfg b/resources/quality/abax_titan/atitan_pla_high.inst.cfg index 2cffe3ce8a..7ee8c35133 100644 --- a/resources/quality/abax_titan/atitan_pla_high.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_high.inst.cfg @@ -7,7 +7,7 @@ type = quality material = generic_pla weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] layer_height = 0.1 diff --git a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg index f1b6237e07..6c40914566 100644 --- a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg new file mode 100644 index 0000000000..3454f8b3ad --- /dev/null +++ b/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +name = Coarse +definition = builder_premium_small + +[metadata] +type = quality +quality_type = coarse +material = generic_pla_175 +setting_version = 4 +weight = -1 +global_quality = True + +[values] +material_print_temperature = =default_material_print_temperature + 15 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.3 +top_thickness = =layer_height * 5 +bottom_thickness = =layer_height * 3 +speed_print = 60 + diff --git a/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg new file mode 100644 index 0000000000..b5ac4cb6a1 --- /dev/null +++ b/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg @@ -0,0 +1,26 @@ +[general] +version = 2 +name = High Quality +definition = builder_premium_small + +[metadata] +type = quality +quality_type = high +material = generic_pla_175 +setting_version = 4 +weight = 1 +global_quality = True + +[values] +acceleration_print = 2000 +material_print_temperature = =default_material_print_temperature + 15 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.1 +top_thickness = =layer_height * 7 +bottom_thickness = =layer_height * 5 +speed_print = 40 +layer_height_0 = 0.2 \ No newline at end of file diff --git a/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..c5a93e65c1 --- /dev/null +++ b/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg @@ -0,0 +1,24 @@ +[general] +version = 2 +name = Normal +definition = builder_premium_small + +[metadata] +type = quality +quality_type = normal +material = generic_pla_175 +setting_version = 4 +weight = 0 +global_quality = True + +[values] +material_print_temperature = =default_material_print_temperature + 15 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.2 +top_thickness = =layer_height * 5 +bottom_thickness = =layer_height * 3 +speed_print = 50 \ No newline at end of file diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg index 3abcc16f39..418855a9ba 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_abs_175_cartesio_0.25_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg index a47fc2b8bf..e95ef08e22 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_abs_175_cartesio_0.25_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg index c37b5c677c..524f5ba12a 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_abs_175_cartesio_0.4_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg index ec0fdfa07b..24ffb19d6f 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_abs_175_cartesio_0.4_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg index 211e78357b..1281a3afdd 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = coarse material = generic_abs_175_cartesio_0.8_mm weight = 3 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg index 319c0748af..a8d19deef7 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = extra coarse material = generic_abs_175_cartesio_0.8_mm weight = 4 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg index fc3b1e49f0..87cc855f44 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_abs_175_cartesio_0.8_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg index 0c453ed6b0..4ca2598051 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_abs_175_cartesio_0.8_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg index 4052520597..42eb705f11 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = dsm_arnitel2045_175_cartesio_0.4_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg index a8a5e22a3b..538fe91b76 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = dsm_arnitel2045_175_cartesio_0.4_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index 29c99bda49..11760b139f 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = coarse global_quality = True weight = -3 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.4 diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index e5cb9712d2..c654dba598 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = extra coarse global_quality = True weight = -4 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.6 diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index 16570b97bf..393a5f3b39 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high global_quality = True weight = 1 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.1 diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index 182ae137e7..c09493ba10 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal global_quality = True weight = 0 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg index 1a51725339..eae4e82cd3 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_hips_175_cartesio_0.25_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg index fa845592fa..0c47b18196 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_hips_175_cartesio_0.25_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg index 56b5e7ef38..14f1ea4662 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_hips_175_cartesio_0.4_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg index cad4b5255f..bd13b358ff 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_hips_175_cartesio_0.4_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg index b52f4df1fa..ca864692c3 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = coarse material = generic_hips_175_cartesio_0.8_mm weight = 3 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg index 7eba4c99c4..3cadef4fdd 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = extra coarse material = generic_hips_175_cartesio_0.8_mm weight = 4 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg index 06ddcc0959..07839c8a9a 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_hips_175_cartesio_0.8_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg index 534d63115b..acc9db0891 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_hips_175_cartesio_0.8_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg index ba2c95043c..b1f2f17d41 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_nylon_175_cartesio_0.25_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg index fb9393577f..bcfa1c2e30 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_nylon_175_cartesio_0.25_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg index 92c00bc5df..2cd50efeb2 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_nylon_175_cartesio_0.4_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg index 389a01fcb4..7a7d767ea3 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_nylon_175_cartesio_0.4_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg index f8ed2fbf41..5684c89e23 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = coarse material = generic_nylon_175_cartesio_0.8_mm weight = 3 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg index 607069e4db..8d97e9ac5f 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = extra coarse material = generic_nylon_175_cartesio_0.8_mm weight = 4 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg index 3c1bbffa83..946f8de34d 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_nylon_175_cartesio_0.8_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg index e964ab95b2..80f390c254 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_nylon_175_cartesio_0.8_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg index 86f2dbf91f..2f401556d4 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_pc_175_cartesio_0.25_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg index f24f3caed0..225b0ec5cf 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pc_175_cartesio_0.25_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg index 3d44cfd39f..53e61a81a2 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_pc_175_cartesio_0.4_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg index fe873f537a..e7b179dfe1 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pc_175_cartesio_0.4_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg index 4e802a4e9b..baa3a1fdce 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = coarse material = generic_pc_175_cartesio_0.8_mm weight = 3 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg index 21153fce38..81f939f800 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = extra coarse material = generic_pc_175_cartesio_0.8_mm weight = 4 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg index a8cc757fbb..41b2cc70f0 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_pc_175_cartesio_0.8_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg index 9574471b1c..e5ae6aff1d 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pc_175_cartesio_0.8_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg index 2efa3ca0da..c5c4be6f4a 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_petg_175_cartesio_0.25_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg index 377520f471..6d12bdc402 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_petg_175_cartesio_0.25_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg index c31c18b192..43dda5007c 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_petg_175_cartesio_0.4_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg index 1bf8c4a4d6..094dc33263 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_petg_175_cartesio_0.4_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg index 599ba08eaa..da9e4ad3dd 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = coarse material = generic_petg_175_cartesio_0.8_mm weight = 3 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg index 2f1a138115..607ba778a1 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = extra coarse material = generic_petg_175_cartesio_0.8_mm weight = 4 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg index 1a804307c9..3010d95dab 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_petg_175_cartesio_0.8_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg index 6eca142191..fbf8fac67f 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_petg_175_cartesio_0.8_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg index 9cfa09aee7..9d8130602e 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_pla_175_cartesio_0.25_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg index 359ca15f96..98401dbf42 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pla_175_cartesio_0.25_mm weight = 0 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg index 3d97fdbae8..2eda5103d7 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_pla_175_cartesio_0.4_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg index fef8bb53d3..f3d3820ff7 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pla_175_cartesio_0.4_mm weight = 0 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg index 06cd974d26..d2cf708336 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = coarse material = generic_pla_175_cartesio_0.8_mm weight = -3 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg index d161befcc1..888d8f91a7 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = extra coarse material = generic_pla_175_cartesio_0.8_mm weight = -4 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg index b017fb9d5d..558514db98 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_pla_175_cartesio_0.8_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg index 6075c2651f..9c508e4a1f 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pla_175_cartesio_0.8_mm weight = 0 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg index bd170cfccc..fcbf4913de 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_pva_175_cartesio_0.25_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg index 23ba53078b..3893421df0 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pva_175_cartesio_0.25_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg index de12e2987d..5876db1e2e 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_pva_175_cartesio_0.4_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg index 3418cce66c..c977e79a5c 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pva_175_cartesio_0.4_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg index 17c9f81d2d..8c36d8e7ed 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = coarse material = generic_pva_175_cartesio_0.8_mm weight = 3 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg index ffd4e34204..c2b19868f6 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = extra coarse material = generic_pva_175_cartesio_0.8_mm weight = 4 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg index bd32e91b20..5bd285285a 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_pva_175_cartesio_0.8_mm weight = 1 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg index 6d309464a6..a11bff95e1 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pva_175_cartesio_0.8_mm weight = 2 -setting_version = 3 +setting_version = 4 [values] infill_line_width = 0.9 diff --git a/resources/quality/coarse.inst.cfg b/resources/quality/coarse.inst.cfg index 3f197bb50c..133ffc8951 100644 --- a/resources/quality/coarse.inst.cfg +++ b/resources/quality/coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = coarse global_quality = True weight = -3 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.4 diff --git a/resources/quality/deltacomb/deltacomb_abs_fast.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_fast.inst.cfg new file mode 100644 index 0000000000..43643b6b92 --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_abs_fast.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +definition = deltacomb +name = Fast Quality (beta) + +[metadata] +type = quality +setting_version = 4 +material = generic_abs_175 +quality_type = fast +weight = -1 + +[values] +adhesion_type = raft +layer_height = 0.2 +layer_height_0 = 0.2 +cool_fan_enabled = True +cool_fan_full_at_height = 0.4 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 50 +cool_min_layer_time = 3 +cool_min_speed = 20 +material_bed_temperature = 80 + diff --git a/resources/quality/deltacomb/deltacomb_abs_high.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_high.inst.cfg new file mode 100644 index 0000000000..99e47bc9cb --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_abs_high.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +definition = deltacomb +name = High Quality (beta) + +[metadata] +type = quality +setting_version = 4 +material = generic_abs_175 +quality_type = high +weight = 1 + +[values] +adhesion_type = raft +layer_height = 0.1 +layer_height_0 = 0.1 +cool_fan_enabled = True +cool_fan_full_at_height = 0.2 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 50 +cool_min_layer_time = 3 +cool_min_speed = 20 +material_bed_temperature = 80 + diff --git a/resources/quality/deltacomb/deltacomb_abs_normal.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_normal.inst.cfg new file mode 100644 index 0000000000..a2aa2be769 --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_abs_normal.inst.cfg @@ -0,0 +1,24 @@ +[general] +version = 2 +definition = deltacomb +name = Normal Quality (beta) + +[metadata] +type = quality +setting_version = 4 +material = generic_abs_175 +quality_type = normal +weight = 0 + +[values] +adhesion_type = raft +layer_height = 0.15 +layer_height_0 = 0.15 +cool_fan_enabled = True +cool_fan_full_at_height = 0.3 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 50 +cool_min_layer_time = 3 +cool_min_speed = 20 +material_bed_temperature = 80 diff --git a/resources/quality/deltacomb/deltacomb_nylon_fast.inst.cfg b/resources/quality/deltacomb/deltacomb_nylon_fast.inst.cfg new file mode 100644 index 0000000000..fac23939cf --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_nylon_fast.inst.cfg @@ -0,0 +1,57 @@ +[general] +version = 2 +name = Fast Quality (beta) +definition = deltacomb + +[metadata] +type = quality +material = generic_nylon_175 +quality_type = fast +weight = -1 +setting_version = 4 + +[values] +adhesion_type = raft +brim_width = 4 +cool_fan_enabled = False +cool_fan_full_at_height = 0.45 +cool_fan_speed = 0 +cool_fan_speed_max = 0 +cool_fan_speed_min = 0 +cool_min_layer_time = 5 +cool_min_speed = 0 +infill_overlap = 15 +infill_sparse_density = 24 +layer_height = 0.20 +layer_height_0 = 0.15 +line_width = =machine_nozzle_size +material_flow = 100 +raft_airgap = 0.22 +raft_base_line_width= =line_width * 2 +raft_base_thickness = =layer_height_0 * 2 +raft_interface_line_width = =line_width +raft_interface_thickness = =layer_height +raft_margin = 5 +raft_surface_layers = 2 +raft_surface_line_width = =line_width +raft_surface_thickness = =layer_height +retraction_hop = 0.5 +retraction_hop_enabled = False +retraction_hop_only_when_collides = True +skin_overlap = 10 +skirt_brim_minimal_length = 75 +skirt_gap = 1.5 +skirt_line_count = 5 +speed_infill = =speed_print +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 40 +speed_travel = 200 +speed_wall_0 = 40 +speed_wall_x = =speed_print +support_angle = 70 +support_type = buildplate +support_z_distance = 0.15 +top_bottom_thickness = 0.8 +wall_thickness = 0.8 +z_seam_type = random diff --git a/resources/quality/deltacomb/deltacomb_nylon_high.inst.cfg b/resources/quality/deltacomb/deltacomb_nylon_high.inst.cfg new file mode 100644 index 0000000000..d594126474 --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_nylon_high.inst.cfg @@ -0,0 +1,57 @@ +[general] +version = 2 +name = High Quality (beta) +definition = deltacomb + +[metadata] +type = quality +material = generic_nylon_175 +quality_type = high +weight = 1 +setting_version = 4 + +[values] +adhesion_type = raft +brim_width = 4 +cool_fan_enabled = False +cool_fan_full_at_height = 0.45 +cool_fan_speed = 0 +cool_fan_speed_max = 0 +cool_fan_speed_min = 0 +cool_min_layer_time = 5 +cool_min_speed = 0 +infill_overlap = 15 +infill_sparse_density = 24 +layer_height = 0.10 +layer_height_0 = 0.10 +line_width = =machine_nozzle_size +material_flow = 100 +raft_airgap = 0.22 +raft_base_line_width= =line_width * 2 +raft_base_thickness = =layer_height_0 * 2 +raft_interface_line_width = =line_width +raft_interface_thickness = =layer_height +raft_margin = 5 +raft_surface_layers = 2 +raft_surface_line_width = =line_width +raft_surface_thickness = =layer_height +retraction_hop = 0.5 +retraction_hop_enabled = False +retraction_hop_only_when_collides = True +skin_overlap = 10 +skirt_brim_minimal_length = 75 +skirt_gap = 1.5 +skirt_line_count = 5 +speed_infill = =speed_print +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 40 +speed_travel = 200 +speed_wall_0 = 40 +speed_wall_x = =speed_print +support_angle = 70 +support_type = buildplate +support_z_distance = 0.15 +top_bottom_thickness = 0.8 +wall_thickness = 0.8 +z_seam_type = random diff --git a/resources/quality/deltacomb/deltacomb_nylon_normal.inst.cfg b/resources/quality/deltacomb/deltacomb_nylon_normal.inst.cfg new file mode 100644 index 0000000000..76716fc16d --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_nylon_normal.inst.cfg @@ -0,0 +1,58 @@ +[general] +version = 2 +name = Normal Quality (beta) +definition = deltacomb + +[metadata] +type = quality +material = generic_nylon_175 +quality_type = normal +weight = 0 +setting_version = 4 + +[values] +adhesion_type = raft +brim_width = 4 +cool_fan_enabled = False +cool_fan_full_at_height = 0.45 +cool_fan_speed = 0 +cool_fan_speed_max = 0 +cool_fan_speed_min = 0 +cool_min_layer_time = 5 +cool_min_speed = 0 +infill_overlap = 15 +infill_sparse_density = 24 +layer_height = 0.15 +layer_height_0 = 0.10 +line_width = =machine_nozzle_size +material_flow = 100 +raft_airgap = 0.22 +raft_base_line_width= =line_width * 2 +raft_base_thickness = =layer_height_0 * 2 +raft_interface_line_width = =line_width +raft_interface_thickness = =layer_height +raft_margin = 5 +raft_surface_layers = 2 +raft_surface_line_width = =line_width +raft_surface_thickness = =layer_height +retraction_hop = 0.5 +retraction_hop_enabled = False +retraction_hop_only_when_collides = True +skin_overlap = 10 +skirt_brim_minimal_length = 75 +skirt_gap = 1.5 +skirt_line_count = 5 +speed_infill = =speed_print +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 40 +speed_travel = 200 +speed_wall_0 = 40 +speed_wall_x = =speed_print +support_angle = 70 +support_type = buildplate +support_z_distance = 0.15 +top_bottom_thickness = 0.8 +wall_thickness = 0.8 +z_seam_type = random + diff --git a/resources/quality/deltacomb/deltacomb_pla_fast.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_fast.inst.cfg new file mode 100644 index 0000000000..9783cb11cc --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_pla_fast.inst.cfg @@ -0,0 +1,24 @@ +[general] +version = 2 +definition = deltacomb +name = Fast Quality + +[metadata] +type = quality +setting_version = 4 +material = generic_pla_175 +quality_type = fast +weight = -1 + +[values] +adhesion_type = skirt +layer_height = 0.2 +layer_height_0 = 0.2 +cool_fan_enabled = True +cool_fan_full_at_height = 0.4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +cool_min_layer_time = 5 +cool_min_speed = 20 + diff --git a/resources/quality/deltacomb/deltacomb_pla_high.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_high.inst.cfg new file mode 100644 index 0000000000..9513e98b6a --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_pla_high.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +definition = deltacomb +name = High Quality + +[metadata] +type = quality +setting_version = 4 +material = generic_pla_175 +quality_type = high +weight = 1 + +[values] +adhesion_type = skirt +layer_height = 0.1 +layer_height_0 = 0.1 +cool_fan_enabled = True +cool_fan_full_at_height = 0.2 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +cool_min_layer_time = 5 +cool_min_speed = 20 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 + diff --git a/resources/quality/deltacomb/deltacomb_pla_normal.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_normal.inst.cfg new file mode 100644 index 0000000000..d88f5909f0 --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_pla_normal.inst.cfg @@ -0,0 +1,23 @@ +[general] +version = 2 +definition = deltacomb +name = Normal Quality + +[metadata] +type = quality +setting_version = 4 +material = generic_pla_175 +quality_type = normal +weight = 0 + +[values] +adhesion_type = skirt +layer_height = 0.15 +layer_height_0 = 0.15 +cool_fan_enabled = True +cool_fan_full_at_height = 0.3 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +cool_min_layer_time = 5 +cool_min_speed = 20 diff --git a/resources/quality/draft.inst.cfg b/resources/quality/draft.inst.cfg index 00932feb68..a155c8f2e1 100644 --- a/resources/quality/draft.inst.cfg +++ b/resources/quality/draft.inst.cfg @@ -9,7 +9,7 @@ type = quality quality_type = draft global_quality = True weight = -2 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/extra_coarse.inst.cfg b/resources/quality/extra_coarse.inst.cfg index 183fa825e8..ce28e54721 100644 --- a/resources/quality/extra_coarse.inst.cfg +++ b/resources/quality/extra_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = Extra coarse global_quality = True weight = -4 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.6 diff --git a/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg index d38323a180..245997a27e 100644 --- a/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg @@ -5,7 +5,7 @@ name = Fast Quality [metadata] type = quality -setting_version = 3 +setting_version = 4 material = fabtotum_abs quality_type = fast weight = -1 diff --git a/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg index 5333512e4c..26300eec7d 100644 --- a/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg @@ -5,7 +5,7 @@ name = High Quality [metadata] type = quality -setting_version = 3 +setting_version = 4 material = fabtotum_abs quality_type = high weight = 1 diff --git a/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg index fd0fca7887..53d20c8cbc 100644 --- a/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg @@ -5,7 +5,7 @@ name = Normal Quality [metadata] type = quality -setting_version = 3 +setting_version = 4 material = fabtotum_abs quality_type = normal weight = 0 diff --git a/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg index 1c9e384e77..22bbcbeaeb 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = fabtotum_nylon quality_type = fast weight = -1 -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg index cffa1f0e86..a625bd715f 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg @@ -8,7 +8,7 @@ type = quality material = fabtotum_nylon quality_type = high weight = 1 -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg index c2bec3396e..b05d30c5c6 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = fabtotum_nylon quality_type = normal weight = 0 -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg index 4adda21b5a..1f1c93961b 100644 --- a/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg @@ -5,7 +5,7 @@ name = Fast Quality [metadata] type = quality -setting_version = 3 +setting_version = 4 material = fabtotum_pla quality_type = fast weight = -1 diff --git a/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg index e3aed0ab0e..9cd067703c 100644 --- a/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg @@ -5,7 +5,7 @@ name = High Quality [metadata] type = quality -setting_version = 3 +setting_version = 4 material = fabtotum_pla quality_type = high weight = 1 diff --git a/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg index 81a75283a5..5b5125c4e5 100644 --- a/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg @@ -5,7 +5,7 @@ name = Normal Quality [metadata] type = quality -setting_version = 3 +setting_version = 4 material = fabtotum_pla quality_type = normal weight = 0 diff --git a/resources/quality/high.inst.cfg b/resources/quality/high.inst.cfg index 846dc58827..d4333c90da 100644 --- a/resources/quality/high.inst.cfg +++ b/resources/quality/high.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high global_quality = True weight = 1 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.06 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg index ad22aacc18..e36286c6ae 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_petg_imade3d_jellybox_0.4_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg index 35268229b3..3240bad98b 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_petg_imade3d_jellybox_0.4_mm_2-fans weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg index ca5f8b5a28..2790a5a742 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_petg_imade3d_jellybox_0.4_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg index a2b540dc7f..14f141f0bf 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_petg_imade3d_jellybox_0.4_mm_2-fans weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg index b3472a0cf5..842ec618e0 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg index c7dd462a74..17e085d84d 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm_2-fans weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg index 7035deab6e..a4b44f47f6 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg index 73e33a74fb..962b3c9ad4 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm_2-fans weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg index 8a14eab5c6..952b16ecf8 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg index 64917bc37d..bd70d105a4 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm_2-fans weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg index 15be25bb1b..a9d0679612 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm weight = 2 quality_type = ultrahigh -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg index b4f0db9cb6..097e1fc76a 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm_2-fans weight = 2 quality_type = ultrahigh -setting_version = 3 +setting_version = 4 [values] adhesion_type = skirt diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg index 5d3bf86b90..5401ec7bd6 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = -3 material = generic_abs quality_type = coarse -setting_version = 3 +setting_version = 4 [values] layer_height = 0.35 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg index e29c38f225..aea8fc9535 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = 1 material = generic_abs quality_type = high -setting_version = 3 +setting_version = 4 [values] layer_height = 0.06 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg index 552ad8901e..24adbd9f6c 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = 0 material = generic_abs quality_type = normal -setting_version = 3 +setting_version = 4 [values] layer_height = 0.1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg index a63f9065ef..98d2475633 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = -2 material = generic_abs quality_type = draft -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg index 1449961b6c..ab2e9dabbc 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = -1 material = generic_abs quality_type = low -setting_version = 3 +setting_version = 4 [values] layer_height = 0.15 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg index 2b3e64c67b..f868ab40fc 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = -3 material = generic_pla quality_type = coarse -setting_version = 3 +setting_version = 4 [values] layer_height = 0.35 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg index 2c14044484..e907f7ccaf 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] layer_height = 0.06 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg index 48617d23df..841023d532 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = 0 material = generic_pla quality_type = normal -setting_version = 3 +setting_version = 4 [values] layer_height = 0.1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg index 724c52b40d..ca874c6bce 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = -2 material = generic_pla quality_type = draft -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg index 7c6f7d5e05..fcfbe72b24 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = -1 material = generic_pla quality_type = low -setting_version = 3 +setting_version = 4 [values] layer_height = 0.15 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg index 105cf0b199..009af9b87b 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = -3 material = generic_pla quality_type = coarse -setting_version = 3 +setting_version = 4 [values] layer_height = 0.35 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg index 35aef2e19e..447e3b012d 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] layer_height = 0.06 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg index 06ec265152..80b2375108 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = 0 material = generic_pla quality_type = normal -setting_version = 3 +setting_version = 4 [values] layer_height = 0.1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg index db47c47fc4..e30c52f4e6 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = -2 material = generic_pla quality_type = draft -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg index 1ad63191a4..31bdaa51bc 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality weight = -1 material = generic_pla quality_type = low -setting_version = 3 +setting_version = 4 [values] layer_height = 0.15 diff --git a/resources/quality/low.inst.cfg b/resources/quality/low.inst.cfg index 21e4d0d404..e92490722d 100644 --- a/resources/quality/low.inst.cfg +++ b/resources/quality/low.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = low global_quality = True weight = -1 -setting_version = 3 +setting_version = 4 [values] infill_sparse_density = 10 diff --git a/resources/quality/normal.inst.cfg b/resources/quality/normal.inst.cfg index acbdf1033e..9fb7b238cd 100644 --- a/resources/quality/normal.inst.cfg +++ b/resources/quality/normal.inst.cfg @@ -8,6 +8,6 @@ type = quality quality_type = normal global_quality = True weight = 0 -setting_version = 3 +setting_version = 4 [values] diff --git a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg index deefea63dd..ae8a377116 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg @@ -7,7 +7,7 @@ definition = peopoly_moai type = quality weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] infill_sparse_density = 70 diff --git a/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg index f9ed09afca..07ab7e364b 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg @@ -7,7 +7,7 @@ definition = peopoly_moai type = quality weight = 2 quality_type = extra_high -setting_version = 3 +setting_version = 4 [values] infill_sparse_density = 70 diff --git a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg index 7cbd9a84fe..e0d2f7d818 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg @@ -7,7 +7,7 @@ definition = peopoly_moai type = quality weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] infill_sparse_density = 70 diff --git a/resources/quality/ultimaker2/um2_draft.inst.cfg b/resources/quality/ultimaker2/um2_draft.inst.cfg index 11bdf03e92..4fe3f51e20 100644 --- a/resources/quality/ultimaker2/um2_draft.inst.cfg +++ b/resources/quality/ultimaker2/um2_draft.inst.cfg @@ -7,7 +7,7 @@ definition = ultimaker2 type = quality quality_type = draft weight = -2 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/ultimaker2/um2_high.inst.cfg b/resources/quality/ultimaker2/um2_high.inst.cfg index 63b820479a..96941beed2 100644 --- a/resources/quality/ultimaker2/um2_high.inst.cfg +++ b/resources/quality/ultimaker2/um2_high.inst.cfg @@ -7,7 +7,7 @@ definition = ultimaker2 type = quality quality_type = high weight = 1 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.06 diff --git a/resources/quality/ultimaker2/um2_low.inst.cfg b/resources/quality/ultimaker2/um2_low.inst.cfg index bb8ef2fa87..832962984c 100644 --- a/resources/quality/ultimaker2/um2_low.inst.cfg +++ b/resources/quality/ultimaker2/um2_low.inst.cfg @@ -7,7 +7,7 @@ definition = ultimaker2 type = quality quality_type = low weight = -1 -setting_version = 3 +setting_version = 4 [values] infill_sparse_density = 10 diff --git a/resources/quality/ultimaker2/um2_normal.inst.cfg b/resources/quality/ultimaker2/um2_normal.inst.cfg index 0673ba9eb4..ea804feb80 100644 --- a/resources/quality/ultimaker2/um2_normal.inst.cfg +++ b/resources/quality/ultimaker2/um2_normal.inst.cfg @@ -7,6 +7,6 @@ definition = ultimaker2 type = quality quality_type = normal weight = 0 -setting_version = 3 +setting_version = 4 [values] diff --git a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg index ba94d1a008..638a1a9384 100644 --- a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_ultimaker2_plus_0.25_mm weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] cool_min_layer_time = 5 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg index fa91cb12e5..9f4dfc0b5d 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_ultimaker2_plus_0.4_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] cool_min_layer_time = 5 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg index 97253fb753..7bf51b0211 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_ultimaker2_plus_0.4_mm weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] cool_min_layer_time = 5 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg index 2b63b8e8be..3c6f40e0bc 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pla_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] cool_min_layer_time = 5 diff --git a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg index 6d4dc257bf..ef79e30b74 100644 --- a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg @@ -8,7 +8,7 @@ material = generic_pla_ultimaker2_plus_0.6_mm type = quality weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] cool_min_layer_time = 5 diff --git a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg index 88d95ebc3f..42418ea392 100644 --- a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg @@ -8,7 +8,7 @@ material = generic_pla_ultimaker2_plus_0.8_mm type = quality weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] cool_min_layer_time = 5 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg index e2b7f34549..50a4076de2 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.25_mm weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.2 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg index aa4918b0c7..9d1bcf6ff5 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.4_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.2 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg index 0c8b8233fb..84a5557434 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.4_mm weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.2 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg index de5ddb9726..efc749ad8c 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.2 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg index bff307740a..eb706c5762 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.6_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.5 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg index 510494c0c6..2dba5a9304 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.8_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.5 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg index f47437eb58..8e87e0e7b6 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.25_mm weight = -1 quality_type = high -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg index 7e3dc1a39e..e311df00a8 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.4_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.8 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg index 4be015ce35..685b7798fc 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.4_mm weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.8 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg index 9b5ac3c163..aadb4195f3 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.8 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg index acac263691..332033368f 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.6_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.8 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg index a3b15628dd..e4fcae8aa1 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.8_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] cool_fan_speed_min = =cool_fan_speed * 0.8 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg index 4c81178592..55af936a89 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.4_mm weight = -2 quality_type = draft -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg index 216c8568d1..eb0ca5e81f 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg index b718af40d9..b324d867bc 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.6_mm weight = -2 quality_type = draft -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg index 4e8de61ad6..c8c7576d30 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.6_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg index 1e9f1029c6..28353f729d 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.8_mm weight = -2 quality_type = draft -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg index f64cd2cf1a..f74db21b91 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.8_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg index e136dad3b8..b8924423e2 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.25_mm weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg index e963f8b438..323fa51a8d 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.25_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg index 134c1d033b..7628cd0be1 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.4_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg index 04469385a0..a97a4c4e8f 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg index 20662c3e21..0cd7bbdbfd 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.6_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg index b8cd3a1a3a..d5e0025913 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.6_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg index c615480917..f653a90f95 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.8_mm weight = -2 quality_type = draft -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg index af20b564e4..144c8e74ac 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.8_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg index 0498e5a81f..d38f2af4d3 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.25_mm weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg index e4a08a5bb1..aa176f67a2 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.25_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg index c3d3626380..0408ead05e 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.4_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg index 705dfb175a..ed430f10c0 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg index 5eb29eba57..b6c3a66c0b 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.6_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg index 82a3e56013..0dfb533f56 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.6_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg index 890a08608c..3eee23006f 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.8_mm weight = -2 quality_type = draft -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg index 0456166d70..40da82e6bf 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.8_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = raft diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.25_normal.inst.cfg deleted file mode 100644 index 13b05df085..0000000000 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.25_normal.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker2_plus - -[metadata] -type = quality -material = generic_pp_ultimaker2_plus_0.25_mm -weight = 0 -quality_type = normal -setting_version = 3 -supported = False - -[values] - diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg index d471e39853..6f4e366209 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pp_ultimaker2_plus_0.4_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg index e313b04ac2..c7224f475f 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pp_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg index 901a23ba08..203db9883e 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pp_ultimaker2_plus_0.6_mm weight = -2 quality_type = draft -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg index 3adebf1fc6..64dfbc9281 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pp_ultimaker2_plus_0.6_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg index 55567d2c4e..f6d56242dd 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pp_ultimaker2_plus_0.8_mm weight = -2 quality_type = fast -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg index 8653faea13..ecb3e3da4a 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_pp_ultimaker2_plus_0.8_mm weight = -3 quality_type = draft -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg index bbb4002d0b..b1cb56a543 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_tpu_ultimaker2_plus_0.25_mm weight = 1 quality_type = high -setting_version = 3 +setting_version = 4 [values] adhesion_type = brim diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg index 22fe2566f9..80cc92fe64 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_tpu_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal -setting_version = 3 +setting_version = 4 [values] adhesion_type = brim diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg index 12a8f6521b..9796adada9 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg @@ -8,7 +8,7 @@ type = quality material = generic_tpu_ultimaker2_plus_0.6_mm weight = -1 quality_type = fast -setting_version = 3 +setting_version = 4 [values] adhesion_type = brim diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.8_normal.inst.cfg deleted file mode 100644 index 65f9ba383e..0000000000 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.8_normal.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker2_plus - -[metadata] -weight = 0 -type = quality -quality_type = normal -material = generic_tpu_ultimaker2_plus_0.8_mm -supported = False -setting_version = 3 - -[values] - diff --git a/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..5d798d556e --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg @@ -0,0 +1,24 @@ +[general] +version = 2 +name = Fine +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_abs_ultimaker3_AA_0.25 +weight = 0 +setting_version = 4 + +[values] +cool_fan_speed = 40 +infill_overlap = 15 +material_final_print_temperature = =material_print_temperature - 5 +prime_tower_enable = True +prime_tower_purge_volume = 0.6 +prime_tower_size = 12 +prime_tower_wall_thickness = 0.9 +retraction_prime_speed = 25 +speed_topbottom = =math.ceil(speed_print * 30 / 55) +wall_thickness = 0.92 + diff --git a/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..a68b43fa2a --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 2 +name = Fine +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_cpe_ultimaker3_AA_0.25 +weight = 0 +setting_version = 4 + +[values] +infill_overlap = =10 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 +prime_tower_size = 12 +prime_tower_wall_thickness = 0.9 +retraction_extrusion_window = 0.5 +speed_infill = 40 +speed_topbottom = =math.ceil(speed_print * 30 / 55) +top_bottom_thickness = 0.8 +wall_thickness = 0.92 + diff --git a/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..fda770266e --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg @@ -0,0 +1,37 @@ +[general] +version = 2 +name = Fine +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_nylon_ultimaker3_AA_0.25 +weight = 0 +setting_version = 4 + +[values] +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 12 +infill_line_width = =round(line_width * 0.5 / 0.4, 2) +infill_overlap = =10 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 2.0 +ooze_shield_angle = 40 +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 3) +raft_jerk = =jerk_layer_0 +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +retraction_extrusion_window = =retraction_amount +retraction_min_travel = =line_width * 2 +skin_overlap = 50 +speed_print = 70 +speed_topbottom = =math.ceil(speed_print * 30 / 70) +speed_wall = =math.ceil(speed_print * 30 / 70) +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 +wall_line_width_x = =wall_line_width + diff --git a/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..43b8f95677 --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg @@ -0,0 +1,53 @@ +[general] +version = 2 +name = Fine - Experimental +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_pc_ultimaker3_AA_0.25 +weight = 0 +setting_version = 4 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +adhesion_type = brim +brim_width = 20 +cool_fan_full_at_height = =layer_height_0 + layer_height +cool_fan_speed_max = 50 +cool_min_layer_time_fan_speed_max = 5 +cool_min_speed = 5 +infill_line_width = =line_width +infill_pattern = triangles +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +multiple_mesh_overlap = 0 +ooze_shield_angle = 40 +prime_tower_enable = True +retraction_count_max = 80 +retraction_hop = 2 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 25 +speed_travel = 250 +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 25 / 40) +support_bottom_distance = =support_z_distance +support_interface_density = 87.5 +support_interface_pattern = lines +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = 1.2 + diff --git a/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..d3772448cf --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg @@ -0,0 +1,37 @@ +[general] +version = 2 +name = Fine +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_pla_ultimaker3_AA_0.25 +weight = 0 +setting_version = 4 + +[values] +brim_width = 8 +cool_fan_full_at_height = =layer_height_0 +cool_min_speed = 10 +infill_overlap = 10 +infill_pattern = grid +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 2.0 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = 190 +retraction_extrusion_window = =retraction_amount +retraction_hop = 0.2 +skin_overlap = 5 +speed_layer_0 = 30 +speed_print = 30 +speed_travel_layer_0 = 120 +speed_wall = 25 +speed_wall_0 = 20 +top_bottom_thickness = 0.72 +travel_avoid_distance = 0.4 +wall_0_inset = 0.015 +wall_0_wipe_dist = 0.25 +wall_thickness = 0.7 + diff --git a/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..7f138f979d --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg @@ -0,0 +1,60 @@ +[general] +version = 2 +name = Fine - Experimental +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_pp_ultimaker3_AA_0.25 +weight = 0 +setting_version = 4 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 10 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 5 +cool_min_speed = 2.5 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_pattern = tetrahedral +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +line_width = =machine_nozzle_size * 0.92 +machine_min_cool_heat_time_window = 15 +material_bed_temperature_layer_0 = 90 +material_final_print_temperature = 195 +material_initial_print_temperature = 200 +material_print_temperature = 205 +material_print_temperature_layer_0 = 208 +multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_size = 16 +prime_tower_wipe_enabled = True +retraction_count_max = 6 +retraction_extra_prime_amount = 0.2 +retraction_extrusion_window = 6.5 +retraction_hop = 2 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 13 +speed_equalize_flow_enabled = True +speed_layer_0 = 15 +speed_print = 25 +speed_travel = 300 +speed_travel_layer_0 = 50 +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +top_bottom_thickness = 1 +travel_avoid_distance = 3 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 + diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg index ea95ac161b..13dca72c27 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_abs_ultimaker3_AA_0.4 weight = -2 -setting_version = 3 +setting_version = 4 [values] machine_nozzle_cool_down_speed = 0.85 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg index 6db50fe270..10fa10c726 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = fast material = generic_abs_ultimaker3_AA_0.4 weight = -1 -setting_version = 3 +setting_version = 4 [values] cool_min_speed = 7 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg index 305de52ea6..02f2327468 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_abs_ultimaker3_AA_0.4 weight = 1 -setting_version = 3 +setting_version = 4 [values] cool_min_speed = 12 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg index fc23b25e3e..fccb6a35f5 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_abs_ultimaker3_AA_0.4 weight = 0 -setting_version = 3 +setting_version = 4 [values] machine_nozzle_cool_down_speed = 0.85 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg new file mode 100644 index 0000000000..980da522c8 --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg @@ -0,0 +1,38 @@ +[general] +version = 2 +name = Fast +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +material = generic_bam_ultimaker3_AA_0.4 +weight = -2 +setting_version = 4 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = =230 +material_standby_temperature = 100 +# prime_tower_enable: see CURA-4248 +prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 +skin_overlap = 20 +speed_layer_0 = 20 +speed_topbottom = =math.ceil(speed_print * 35 / 70) +speed_wall = =math.ceil(speed_print * 50 / 70) +speed_wall_0 = =math.ceil(speed_wall * 35 / 50) +top_bottom_thickness = 1 +wall_thickness = 1 +support_interface_enable = True +support_interface_density = =min(extruderValues('material_surface_energy')) +support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' +support_top_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 2) * layer_height +support_bottom_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 2) * layer_height +support_angle = 45 +support_join_distance = 5 +support_offset = 2 +support_pattern = triangles +support_infill_rate = 10 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg new file mode 100644 index 0000000000..86b584c9af --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg @@ -0,0 +1,38 @@ +[general] +version = 2 +name = Normal +definition = ultimaker3 + +[metadata] +type = quality +quality_type = fast +material = generic_bam_ultimaker3_AA_0.4 +weight = -1 +setting_version = 4 + +[values] +default_material_print_temperature = 225 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_standby_temperature = 100 +# prime_tower_enable: see CURA-4248 +prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 +speed_print = 80 +speed_layer_0 = 20 +speed_topbottom = =math.ceil(speed_print * 30 / 80) +speed_wall = =math.ceil(speed_print * 40 / 80) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) +top_bottom_thickness = 1 +wall_thickness = 1 +support_interface_enable = True +support_interface_density = =min(extruderValues('material_surface_energy')) +support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' +support_top_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 1) * layer_height +support_bottom_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 2) * layer_height +support_angle = 45 +support_join_distance = 5 +support_offset = 2 +support_pattern = triangles +support_infill_rate = 10 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..b9f35fcfa0 --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg @@ -0,0 +1,36 @@ +[general] +version = 2 +name = Fine +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_bam_ultimaker3_AA_0.4 +weight = 0 +setting_version = 4 + +[values] +default_material_print_temperature = 225 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +cool_min_speed = 7 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_standby_temperature = 100 +# prime_tower_enable: see CURA-4248 +prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 +skin_overlap = 10 +speed_layer_0 = 20 +top_bottom_thickness = 1 +wall_thickness = 1 +support_interface_enable = True +support_interface_density = =min(extruderValues('material_surface_energy')) +support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' +support_top_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 1) * layer_height +support_bottom_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 2) * layer_height +support_angle = 45 +support_join_distance = 5 +support_offset = 2 +support_pattern = triangles +support_infill_rate = 10 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg index bbbfd3b6a1..dfdb1ca8a7 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_cpe_plus_ultimaker3_AA_0.4 weight = -2 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg index f39da90dc6..93b371a627 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = fast material = generic_cpe_plus_ultimaker3_AA_0.4 weight = -1 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg index 6641e0f4ed..93647f9f44 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_cpe_plus_ultimaker3_AA_0.4 weight = 1 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg index c22d6eda31..2886ef2229 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_cpe_plus_ultimaker3_AA_0.4 weight = 0 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg index 96065673d6..5e3daf5a9e 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_cpe_ultimaker3_AA_0.4 weight = -2 -setting_version = 3 +setting_version = 4 [values] material_print_temperature = =default_material_print_temperature + 10 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg index e866877b0e..e48f83994d 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = fast material = generic_cpe_ultimaker3_AA_0.4 weight = -1 -setting_version = 3 +setting_version = 4 [values] cool_min_speed = 7 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg index 971c222ef7..fd0a8cd18d 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_cpe_ultimaker3_AA_0.4 weight = 1 -setting_version = 3 +setting_version = 4 [values] cool_min_speed = 12 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg index d77b673721..56c997eb15 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_cpe_ultimaker3_AA_0.4 weight = 0 -setting_version = 3 +setting_version = 4 [values] machine_nozzle_cool_down_speed = 0.85 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg index 5f3680c391..15283a3242 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_nylon_ultimaker3_AA_0.4 weight = -2 -setting_version = 3 +setting_version = 4 [values] adhesion_type = brim diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg index c5dc2c37f9..c063725e82 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = fast material = generic_nylon_ultimaker3_AA_0.4 weight = -1 -setting_version = 3 +setting_version = 4 [values] adhesion_type = brim diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg index cb39a20918..218e1e50e1 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_nylon_ultimaker3_AA_0.4 weight = 1 -setting_version = 3 +setting_version = 4 [values] adhesion_type = brim diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg index 0e3467d901..3b96939ac9 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_nylon_ultimaker3_AA_0.4 weight = 0 -setting_version = 3 +setting_version = 4 [values] adhesion_type = brim diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg index 2a2e7a1010..f8b4dd067c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_pc_ultimaker3_AA_0.4 weight = -2 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg index 8887895e46..1db3935180 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = fast material = generic_pc_ultimaker3_AA_0.4 weight = -1 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg index 07c372f9dc..0f9e9b15b0 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_pc_ultimaker3_AA_0.4 weight = 1 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg index 9a7daeed93..26a3136069 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pc_ultimaker3_AA_0.4 weight = 0 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg index f2d76753b0..8c6e7bd782 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_pla_ultimaker3_AA_0.4 weight = -2 -setting_version = 3 +setting_version = 4 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg index b78d1598cd..db441015a8 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = fast material = generic_pla_ultimaker3_AA_0.4 weight = -1 -setting_version = 3 +setting_version = 4 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg index 0fa518546f..61807490e9 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high material = generic_pla_ultimaker3_AA_0.4 weight = 1 -setting_version = 3 +setting_version = 4 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg index ca4a3bf27b..d7254b854d 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pla_ultimaker3_AA_0.4 weight = 0 -setting_version = 3 +setting_version = 4 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg index 7be9425947..3fe25e563a 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_pp_ultimaker3_AA_0.4 weight = -2 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg index 132a4e6303..4c92c7a14b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = fast material = generic_pp_ultimaker3_AA_0.4 weight = -1 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg index 780ad8b2a1..db55956497 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_pp_ultimaker3_AA_0.4 weight = 0 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PVA_Fast_Print.inst.cfg deleted file mode 100644 index 121d9c92bb..0000000000 --- a/resources/quality/ultimaker3/um3_aa0.4_PVA_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -weight = 0 -type = quality -quality_type = normal -material = generic_pva_ultimaker3_AA_0.4 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg index f1825240cf..6116dc1bda 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_tpu_ultimaker3_AA_0.4 weight = -2 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg index d223a83554..1da5d0fec8 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = fast material = generic_tpu_ultimaker3_AA_0.4 weight = -1 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg index c0b5065f53..1938e1c26c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal material = generic_tpu_ultimaker3_AA_0.4 weight = 0 -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg index b55678643d..7c16e6e8ee 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_abs_ultimaker3_AA_0.8 weight = -2 -setting_version = 3 +setting_version = 4 [values] line_width = =machine_nozzle_size * 0.875 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg index 3c21c74d8e..728b4c868f 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = superdraft material = generic_abs_ultimaker3_AA_0.8 weight = -4 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg index 9c4352043b..98ae70c568 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = verydraft material = generic_abs_ultimaker3_AA_0.8 weight = -3 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg index 795d224a65..0a05e9aafd 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_cpe_plus_ultimaker3_AA_0.8 weight = -2 -setting_version = 3 +setting_version = 4 [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg index 58723d05fe..82efb6a57b 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = superdraft material = generic_cpe_plus_ultimaker3_AA_0.8 weight = -4 -setting_version = 3 +setting_version = 4 [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg index e125ec9f0b..ff375b6e49 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = verydraft material = generic_cpe_plus_ultimaker3_AA_0.8 weight = -3 -setting_version = 3 +setting_version = 4 [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg index 3c303fc9c2..b4d7035b8d 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_cpe_ultimaker3_AA_0.8 weight = -2 -setting_version = 3 +setting_version = 4 [values] brim_width = 15 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg index 6525e0452f..b5ccc38534 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = superdraft material = generic_cpe_ultimaker3_AA_0.8 weight = -4 -setting_version = 3 +setting_version = 4 [values] brim_width = 15 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg index 195598e0f9..33ae223526 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = verydraft material = generic_cpe_ultimaker3_AA_0.8 weight = -3 -setting_version = 3 +setting_version = 4 [values] brim_width = 15 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg index fec8232b59..43ec77453c 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_nylon_ultimaker3_AA_0.8 weight = -2 -setting_version = 3 +setting_version = 4 [values] brim_width = 5.6 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg index 8a0004309d..5b8626e8c2 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = superdraft material = generic_nylon_ultimaker3_AA_0.8 weight = -4 -setting_version = 3 +setting_version = 4 [values] brim_width = 5.6 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg index d3729b22d9..0b115ada4b 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = verydraft material = generic_nylon_ultimaker3_AA_0.8 weight = -3 -setting_version = 3 +setting_version = 4 [values] brim_width = 5.6 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg index dfc3d3ce72..0b666d2e0b 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_pc_ultimaker3_AA_0.8 weight = 0 -setting_version = 3 +setting_version = 4 [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg index 3f9864b72e..de212df4af 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = superdraft material = generic_pc_ultimaker3_AA_0.8 weight = -2 -setting_version = 3 +setting_version = 4 [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg index 2fe51a392e..3e0c669eeb 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = verydraft material = generic_pc_ultimaker3_AA_0.8 weight = -1 -setting_version = 3 +setting_version = 4 [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg index eebe1a8e38..3c4303e017 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_pla_ultimaker3_AA_0.8 weight = -2 -setting_version = 3 +setting_version = 4 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg index c35bf05908..5509f42aae 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = superdraft material = generic_pla_ultimaker3_AA_0.8 weight = -4 -setting_version = 3 +setting_version = 4 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg index 984a825085..645c3fe3ef 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = verydraft material = generic_pla_ultimaker3_AA_0.8 weight = -3 -setting_version = 3 +setting_version = 4 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg index 0eb264a9db..f46c3cfb8f 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_pp_ultimaker3_AA_0.8 weight = -2 -setting_version = 3 +setting_version = 4 [values] brim_width = 25 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg index cb12f4aedc..ac8087d0c4 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = superdraft material = generic_pp_ultimaker3_AA_0.8 weight = -4 -setting_version = 3 +setting_version = 4 [values] brim_width = 25 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg index 3ceb547378..daf60f24e6 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = verydraft material = generic_pp_ultimaker3_AA_0.8 weight = -3 -setting_version = 3 +setting_version = 4 [values] brim_width = 25 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PVA_Fast_Print.inst.cfg deleted file mode 100644 index 071a72da0d..0000000000 --- a/resources/quality/ultimaker3/um3_aa0.8_PVA_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -weight = 0 -type = quality -quality_type = normal -material = generic_pva_ultimaker3_AA_0.8 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_aa0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PVA_Superdraft_Print.inst.cfg deleted file mode 100644 index 485226fe3d..0000000000 --- a/resources/quality/ultimaker3/um3_aa0.8_PVA_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -weight = 0 -type = quality -quality_type = superdraft -material = generic_pva_ultimaker3_AA_0.8 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg index 0514a22b95..726ab82867 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft material = generic_tpu_ultimaker3_AA_0.8 weight = -2 -setting_version = 3 +setting_version = 4 [values] brim_width = 8.75 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg index 805f12ef81..269725daa9 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = superdraft material = generic_tpu_ultimaker3_AA_0.8 weight = -4 -setting_version = 3 +setting_version = 4 [values] brim_width = 8.75 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg index 3d1f29ee21..dd1737433a 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = verydraft material = generic_tpu_ultimaker3_AA_0.8 weight = -3 -setting_version = 3 +setting_version = 4 [values] brim_width = 8.75 diff --git a/resources/quality/ultimaker3/um3_bb0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_ABS_Fast_Print.inst.cfg deleted file mode 100644 index 65fbb4aa22..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_ABS_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_abs_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_ABS_Superdraft_Print.inst.cfg deleted file mode 100644 index d92791970e..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_ABS_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_abs_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPEP_Fast_Print.inst.cfg deleted file mode 100644 index 3aa8fc43e0..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_cpe_plus_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPEP_Superdraft_Print.inst.cfg deleted file mode 100644 index c3bfa7a731..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_cpe_plus_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPE_Fast_Print.inst.cfg deleted file mode 100644 index 6594cd4403..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_CPE_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_cpe_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPE_Superdraft_Print.inst.cfg deleted file mode 100644 index 4eda6ce767..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_CPE_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_cpe_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_Nylon_Fast_Print.inst.cfg deleted file mode 100644 index ca4589f150..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_nylon_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_Nylon_Superdraft_Print.inst.cfg deleted file mode 100644 index 94dcfe2aff..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_nylon_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PC_Fast_Print.inst.cfg deleted file mode 100644 index 46334b219c..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_PC_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_pc_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PLA_Fast_Print.inst.cfg deleted file mode 100644 index 37998b3346..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_PLA_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_pla_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PLA_Superdraft_Print.inst.cfg deleted file mode 100644 index 51ea4d609a..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_PLA_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_pla_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PP_Fast_Print.inst.cfg deleted file mode 100644 index be9f93c662..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_PP_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_pp_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PP_Superdraft_Print.inst.cfg deleted file mode 100644 index d2f54e3137..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_PP_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_pp_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg index ee57d2b177..c87f744932 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft weight = -2 material = generic_pva_ultimaker3_BB_0.4 -setting_version = 3 +setting_version = 4 [values] material_print_temperature = =default_material_print_temperature + 10 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg index 90280ed2ee..23fa6d61d8 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg @@ -8,7 +8,7 @@ weight = -1 type = quality quality_type = fast material = generic_pva_ultimaker3_BB_0.4 -setting_version = 3 +setting_version = 4 [values] material_print_temperature = =default_material_print_temperature + 5 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg index b8d7dd3ada..3ba82d65c6 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg @@ -8,7 +8,7 @@ weight = 1 type = quality quality_type = high material = generic_pva_ultimaker3_BB_0.4 -setting_version = 3 +setting_version = 4 [values] material_standby_temperature = 100 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg index 32591a38b7..a709d5613b 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -8,7 +8,7 @@ weight = 0 type = quality quality_type = normal material = generic_pva_ultimaker3_BB_0.4 -setting_version = 3 +setting_version = 4 [values] material_standby_temperature = 100 diff --git a/resources/quality/ultimaker3/um3_bb0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_TPU_Fast_Print.inst.cfg deleted file mode 100644 index ba1eaaf548..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_TPU_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_tpu_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_TPU_Superdraft_Print.inst.cfg deleted file mode 100644 index 783d1dfa80..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.4_TPU_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_tpu_ultimaker3_BB_0.4 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_ABS_Fast_Print.inst.cfg deleted file mode 100644 index 7f4dc9f23e..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_ABS_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_abs_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_ABS_Superdraft_Print.inst.cfg deleted file mode 100644 index c0fe6216c2..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_ABS_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_abs_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPEP_Fast_Print.inst.cfg deleted file mode 100644 index 4aa96f3a02..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_cpe_plus_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPEP_Superdraft_Print.inst.cfg deleted file mode 100644 index 5e2d079f20..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_cpe_plus_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPE_Fast_Print.inst.cfg deleted file mode 100644 index 384d44cf93..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_CPE_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_cpe_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPE_Superdraft_Print.inst.cfg deleted file mode 100644 index 87bdedb204..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_CPE_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_cpe_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_Nylon_Fast_Print.inst.cfg deleted file mode 100644 index 699bb575d2..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_nylon_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_Nylon_Superdraft_Print.inst.cfg deleted file mode 100644 index 261d63e6e7..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_nylon_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PC_Fast_Print.inst.cfg deleted file mode 100644 index ac8515a1ea..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_PC_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_pc_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PC_Superdraft_Print.inst.cfg deleted file mode 100644 index 12d82993e6..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_PC_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_pc_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PLA_Fast_Print.inst.cfg deleted file mode 100644 index f93273a33a..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_PLA_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_pla_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PLA_Superdraft_Print.inst.cfg deleted file mode 100644 index 499af56b4b..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_PLA_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_pla_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PP_Fast_Print.inst.cfg deleted file mode 100644 index 5ffda57b8b..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_PP_Fast_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_pp_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PP_Superdraft_Print.inst.cfg deleted file mode 100644 index aa50edcf55..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_PP_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_pp_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg index a46218f31f..4cb296b4c7 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft weight = -2 material = generic_pva_ultimaker3_BB_0.8 -setting_version = 3 +setting_version = 4 [values] material_print_temperature = =default_material_print_temperature + 5 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg index 4e2f13af07..5249517844 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = superdraft weight = -4 material = generic_pva_ultimaker3_BB_0.8 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.4 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg index c2d66f59bb..c34e19b134 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = verydraft weight = -3 material = generic_pva_ultimaker3_BB_0.8 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.3 diff --git a/resources/quality/ultimaker3/um3_bb0.8_TPU_Fast_print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_TPU_Fast_print.inst.cfg deleted file mode 100644 index 6be3b596f9..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_TPU_Fast_print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_tpu_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_TPU_Superdraft_Print.inst.cfg deleted file mode 100644 index e3484b3556..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_TPU_Superdraft_Print.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_tpu_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 3 - -[values] diff --git a/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg index f9976d0fbc..b56775a987 100644 --- a/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = draft global_quality = True weight = -2 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.2 diff --git a/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg index 0a30227322..12f1183364 100644 --- a/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = fast global_quality = True weight = -1 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.15 diff --git a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg index a7028590af..cf6e6c45e0 100644 --- a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = high global_quality = True weight = 0 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.06 diff --git a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg index c8bf165b55..fef2328923 100644 --- a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = normal global_quality = True weight = 0 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.1 diff --git a/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg index f3ab433e92..be9acd4394 100644 --- a/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = superdraft global_quality = True weight = -4 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.4 diff --git a/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg index 46199fcece..e2c828fc2d 100644 --- a/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg @@ -8,7 +8,7 @@ type = quality quality_type = verydraft global_quality = True weight = -3 -setting_version = 3 +setting_version = 4 [values] layer_height = 0.3 diff --git a/resources/themes/cura-light/icons/home.svg b/resources/themes/cura-light/icons/home.svg new file mode 100644 index 0000000000..a355aa07f6 --- /dev/null +++ b/resources/themes/cura-light/icons/home.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index b41ea96846..f084e87da2 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -78,7 +78,7 @@ "text_pressed": [12, 169, 227, 255], "text_subtext": [0, 0, 0, 255], "text_emphasis": [255, 255, 255, 255], - "text_scene": [24, 41, 77, 255], + "text_scene": [31, 36, 39, 255], "text_scene_hover": [70, 84, 113, 255], "error": [255, 140, 0, 255], @@ -100,7 +100,7 @@ "button_text_hover": [255, 255, 255, 255], "button_text_active": [255, 255, 255, 255], "button_text_active_hover": [255, 255, 255, 255], - "button_disabled": [24, 41, 77, 255], + "button_disabled": [31, 36, 39, 255], "button_disabled_text": [255, 255, 255, 101], "button_tooltip": [31, 36, 39, 255], @@ -116,7 +116,7 @@ "action_button_text": [0, 0, 0, 255], "action_button_border": [127, 127, 127, 255], "action_button_hovered": [255, 255, 255, 255], - "action_button_hovered_text": [24, 41, 77, 255], + "action_button_hovered_text": [31, 36, 39, 255], "action_button_hovered_border": [12, 169, 227, 255], "action_button_active": [255, 255, 255, 255], "action_button_active_text": [0, 0, 0, 255], @@ -134,7 +134,7 @@ "print_button_ready_pressed_border": [30, 186, 245, 243], "scrollbar_background": [255, 255, 255, 255], - "scrollbar_handle": [24, 41, 77, 255], + "scrollbar_handle": [31, 36, 39, 255], "scrollbar_handle_hover": [12, 159, 227, 255], "scrollbar_handle_down": [12, 159, 227, 255], @@ -143,11 +143,11 @@ "setting_category_hover": [245, 245, 245, 255], "setting_category_active": [245, 245, 245, 255], "setting_category_active_hover": [245, 245, 245, 255], - "setting_category_text": [24, 41, 77, 255], + "setting_category_text": [31, 36, 39, 255], "setting_category_disabled_text": [24, 41, 77, 101], - "setting_category_hover_text": [24, 41, 77, 255], - "setting_category_active_text": [24, 41, 77, 255], - "setting_category_active_hover_text": [24, 41, 77, 255], + "setting_category_hover_text": [31, 36, 39, 255], + "setting_category_active_text": [31, 36, 39, 255], + "setting_category_active_hover_text": [31, 36, 39, 255], "setting_category_border": [245, 245, 245, 255], "setting_category_disabled_border": [245, 245, 245, 255], "setting_category_hover_border": [12, 159, 227, 255], @@ -155,7 +155,7 @@ "setting_category_active_hover_border": [12, 159, 227, 255], "setting_control": [255, 255, 255, 255], - "setting_control_selected": [24, 41, 77, 255], + "setting_control_selected": [31, 36, 39, 255], "setting_control_highlight": [255, 255, 255, 255], "setting_control_border": [127, 127, 127, 255], "setting_control_border_highlight": [12, 169, 227, 255], @@ -176,7 +176,7 @@ "material_compatibility_warning": [0, 0, 0, 255], "progressbar_background": [245, 245, 245, 255], - "progressbar_control": [24, 41, 77, 255], + "progressbar_control": [31, 36, 39, 255], "slider_groove": [245, 245, 245, 255], "slider_groove_border": [127, 127, 127, 255], @@ -203,9 +203,9 @@ "mode_switch_hover": [255, 255, 255, 255], "mode_switch_border": [127, 127, 127, 255], "mode_switch_border_hover": [12, 169, 227, 255], - "mode_switch_handle": [24, 41, 77, 255], - "mode_switch_text": [24, 41, 77, 255], - "mode_switch_text_hover": [24, 41, 77, 255], + "mode_switch_handle": [31, 36, 39, 255], + "mode_switch_text": [31, 36, 39, 255], + "mode_switch_text_hover": [31, 36, 39, 255], "mode_switch_text_checked": [12, 169, 227, 255], "tooltip": [68, 192, 255, 255], diff --git a/resources/variants/cartesio_0.25.inst.cfg b/resources/variants/cartesio_0.25.inst.cfg index a266b10b24..0e082e5afa 100644 --- a/resources/variants/cartesio_0.25.inst.cfg +++ b/resources/variants/cartesio_0.25.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] author = Cartesio type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.25 diff --git a/resources/variants/cartesio_0.4.inst.cfg b/resources/variants/cartesio_0.4.inst.cfg index fe52e83622..27d07c0328 100644 --- a/resources/variants/cartesio_0.4.inst.cfg +++ b/resources/variants/cartesio_0.4.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] author = Cartesio type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/cartesio_0.8.inst.cfg b/resources/variants/cartesio_0.8.inst.cfg index 8a260c1e17..e96c78d922 100644 --- a/resources/variants/cartesio_0.8.inst.cfg +++ b/resources/variants/cartesio_0.8.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] author = Cartesio type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.8 diff --git a/resources/variants/fabtotum_hyb35.inst.cfg b/resources/variants/fabtotum_hyb35.inst.cfg index 9d46205941..01e94728da 100644 --- a/resources/variants/fabtotum_hyb35.inst.cfg +++ b/resources/variants/fabtotum_hyb35.inst.cfg @@ -6,7 +6,7 @@ definition = fabtotum [metadata] author = FABtotum type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.35 diff --git a/resources/variants/fabtotum_lite04.inst.cfg b/resources/variants/fabtotum_lite04.inst.cfg index 9209b2fffc..ee270a9ead 100644 --- a/resources/variants/fabtotum_lite04.inst.cfg +++ b/resources/variants/fabtotum_lite04.inst.cfg @@ -6,7 +6,7 @@ definition = fabtotum [metadata] author = FABtotum type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/fabtotum_lite06.inst.cfg b/resources/variants/fabtotum_lite06.inst.cfg index 8c03f33794..49722a50d1 100644 --- a/resources/variants/fabtotum_lite06.inst.cfg +++ b/resources/variants/fabtotum_lite06.inst.cfg @@ -6,7 +6,7 @@ definition = fabtotum [metadata] author = FABtotum type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.6 diff --git a/resources/variants/fabtotum_pro02.inst.cfg b/resources/variants/fabtotum_pro02.inst.cfg index 84e1583701..376588fe71 100644 --- a/resources/variants/fabtotum_pro02.inst.cfg +++ b/resources/variants/fabtotum_pro02.inst.cfg @@ -6,7 +6,7 @@ definition = fabtotum [metadata] author = FABtotum type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.2 diff --git a/resources/variants/fabtotum_pro04.inst.cfg b/resources/variants/fabtotum_pro04.inst.cfg index 3e136e951a..54294c572c 100644 --- a/resources/variants/fabtotum_pro04.inst.cfg +++ b/resources/variants/fabtotum_pro04.inst.cfg @@ -6,7 +6,7 @@ definition = fabtotum [metadata] author = FABtotum type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/fabtotum_pro06.inst.cfg b/resources/variants/fabtotum_pro06.inst.cfg index 7aa789fd17..f1055b6ade 100644 --- a/resources/variants/fabtotum_pro06.inst.cfg +++ b/resources/variants/fabtotum_pro06.inst.cfg @@ -6,7 +6,7 @@ definition = fabtotum [metadata] author = FABtotum type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.6 diff --git a/resources/variants/fabtotum_pro08.inst.cfg b/resources/variants/fabtotum_pro08.inst.cfg index f1b9d195e7..ef7eb172be 100644 --- a/resources/variants/fabtotum_pro08.inst.cfg +++ b/resources/variants/fabtotum_pro08.inst.cfg @@ -6,7 +6,7 @@ definition = fabtotum [metadata] author = FABtotum type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.8 diff --git a/resources/variants/imade3d_jellybox_0.4.inst.cfg b/resources/variants/imade3d_jellybox_0.4.inst.cfg index e487b6abdc..ce9e82e59a 100644 --- a/resources/variants/imade3d_jellybox_0.4.inst.cfg +++ b/resources/variants/imade3d_jellybox_0.4.inst.cfg @@ -6,7 +6,7 @@ definition = imade3d_jellybox [metadata] author = IMADE3D type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg b/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg index 2db00fa0e3..60f9793b2a 100644 --- a/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg +++ b/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg @@ -6,7 +6,7 @@ definition = imade3d_jellybox [metadata] author = IMADE3D type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/ultimaker2_0.25.inst.cfg b/resources/variants/ultimaker2_0.25.inst.cfg index 1637f0ceaa..04084867dd 100644 --- a/resources/variants/ultimaker2_0.25.inst.cfg +++ b/resources/variants/ultimaker2_0.25.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2 [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.25 diff --git a/resources/variants/ultimaker2_0.4.inst.cfg b/resources/variants/ultimaker2_0.4.inst.cfg index b074214138..f21d85e258 100644 --- a/resources/variants/ultimaker2_0.4.inst.cfg +++ b/resources/variants/ultimaker2_0.4.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2 [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/ultimaker2_0.6.inst.cfg b/resources/variants/ultimaker2_0.6.inst.cfg index 6bd3b06d22..04128cc297 100644 --- a/resources/variants/ultimaker2_0.6.inst.cfg +++ b/resources/variants/ultimaker2_0.6.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2 [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.6 diff --git a/resources/variants/ultimaker2_0.8.inst.cfg b/resources/variants/ultimaker2_0.8.inst.cfg index 66d05219b1..400069d60b 100644 --- a/resources/variants/ultimaker2_0.8.inst.cfg +++ b/resources/variants/ultimaker2_0.8.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2 [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.8 diff --git a/resources/variants/ultimaker2_extended_0.25.inst.cfg b/resources/variants/ultimaker2_extended_0.25.inst.cfg index 6496025820..bdff9a5795 100644 --- a/resources/variants/ultimaker2_extended_0.25.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.25.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_extended [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.25 diff --git a/resources/variants/ultimaker2_extended_0.4.inst.cfg b/resources/variants/ultimaker2_extended_0.4.inst.cfg index 47be42efd7..2af9a75024 100644 --- a/resources/variants/ultimaker2_extended_0.4.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.4.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_extended [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/ultimaker2_extended_0.6.inst.cfg b/resources/variants/ultimaker2_extended_0.6.inst.cfg index cac05731e8..e0753f1c28 100644 --- a/resources/variants/ultimaker2_extended_0.6.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.6.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_extended [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.6 diff --git a/resources/variants/ultimaker2_extended_0.8.inst.cfg b/resources/variants/ultimaker2_extended_0.8.inst.cfg index 5baaf53163..43c033b799 100644 --- a/resources/variants/ultimaker2_extended_0.8.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.8.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_extended [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.8 diff --git a/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg index 173e69d893..7f1bff4b0c 100644 --- a/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_extended_plus [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.25 diff --git a/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg index 88e3d291d6..f6747d059d 100644 --- a/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_extended_plus [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg index 54b6b90b62..706e4b8aa6 100644 --- a/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_extended_plus [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.6 diff --git a/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg index 5616f01699..287c3155b8 100644 --- a/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_extended_plus [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.8 diff --git a/resources/variants/ultimaker2_plus_0.25.inst.cfg b/resources/variants/ultimaker2_plus_0.25.inst.cfg index 4394090fa4..1d4617c86b 100644 --- a/resources/variants/ultimaker2_plus_0.25.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.25.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_plus [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] coasting_min_volume = 0.17 diff --git a/resources/variants/ultimaker2_plus_0.4.inst.cfg b/resources/variants/ultimaker2_plus_0.4.inst.cfg index ab3dd807ab..75a665ad95 100644 --- a/resources/variants/ultimaker2_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.4.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_plus [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/ultimaker2_plus_0.6.inst.cfg b/resources/variants/ultimaker2_plus_0.6.inst.cfg index c3324bd7a8..60bbbaa049 100644 --- a/resources/variants/ultimaker2_plus_0.6.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.6.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_plus [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.6 diff --git a/resources/variants/ultimaker2_plus_0.8.inst.cfg b/resources/variants/ultimaker2_plus_0.8.inst.cfg index d0cd2424bd..339b320af3 100644 --- a/resources/variants/ultimaker2_plus_0.8.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.8.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker2_plus [metadata] author = Ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] machine_nozzle_size = 0.8 diff --git a/resources/variants/ultimaker3_aa0.25.inst.cfg b/resources/variants/ultimaker3_aa0.25.inst.cfg new file mode 100644 index 0000000000..ebb584f674 --- /dev/null +++ b/resources/variants/ultimaker3_aa0.25.inst.cfg @@ -0,0 +1,40 @@ +[general] +name = AA 0.25 +version = 2 +definition = ultimaker3 + +[metadata] +author = ultimaker +type = variant +setting_version = 4 + +[values] +brim_width = 7 +infill_line_width = 0.23 +infill_overlap = 0 +layer_height_0 = 0.17 +line_width = 0.23 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +machine_nozzle_id = AA 0.25 +machine_nozzle_size = 0.25 +machine_nozzle_tip_outer_diameter = 0.65 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +raft_interface_thickness = =layer_height * 1.5 +retraction_count_max = 25 +retraction_extrusion_window = 1 +retraction_min_travel = 0.7 +skin_overlap = 15 +speed_layer_0 = 20 +speed_print = 55 +speed_topbottom = 20 +speed_wall = =math.ceil(speed_print * 30 / 55) +support_angle = 60 +support_bottom_distance = =support_z_distance / 2 +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +top_bottom_thickness = 1.2 +wall_line_width_x = 0.23 +wall_thickness = 1.3 + diff --git a/resources/variants/ultimaker3_aa0.8.inst.cfg b/resources/variants/ultimaker3_aa0.8.inst.cfg index 980cfd1a59..de7dfcc364 100644 --- a/resources/variants/ultimaker3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_aa0.8.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker3 [metadata] author = ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/variants/ultimaker3_aa04.inst.cfg b/resources/variants/ultimaker3_aa04.inst.cfg index 01299f0853..289ae185b0 100644 --- a/resources/variants/ultimaker3_aa04.inst.cfg +++ b/resources/variants/ultimaker3_aa04.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker3 [metadata] author = ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] brim_width = 7 diff --git a/resources/variants/ultimaker3_bb0.8.inst.cfg b/resources/variants/ultimaker3_bb0.8.inst.cfg index 24c175c2b8..2cb3103dcf 100644 --- a/resources/variants/ultimaker3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_bb0.8.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker3 [metadata] author = ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/variants/ultimaker3_bb04.inst.cfg b/resources/variants/ultimaker3_bb04.inst.cfg index 39d33b10f8..5dc0b2832a 100644 --- a/resources/variants/ultimaker3_bb04.inst.cfg +++ b/resources/variants/ultimaker3_bb04.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker3 [metadata] author = ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) diff --git a/resources/variants/ultimaker3_extended_aa0.25.inst.cfg b/resources/variants/ultimaker3_extended_aa0.25.inst.cfg new file mode 100644 index 0000000000..631768346e --- /dev/null +++ b/resources/variants/ultimaker3_extended_aa0.25.inst.cfg @@ -0,0 +1,40 @@ +[general] +name = AA 0.25 +version = 2 +definition = ultimaker3_extended + +[metadata] +author = ultimaker +type = variant +setting_version = 4 + +[values] +brim_width = 7 +infill_line_width = 0.23 +infill_overlap = 0 +layer_height_0 = 0.17 +line_width = 0.23 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +machine_nozzle_id = AA 0.25 +machine_nozzle_size = 0.25 +machine_nozzle_tip_outer_diameter = 0.65 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +raft_interface_thickness = =layer_height * 1.5 +retraction_count_max = 25 +retraction_extrusion_window = 1 +retraction_min_travel = 0.7 +skin_overlap = 15 +speed_layer_0 = 20 +speed_print = 55 +speed_topbottom = 20 +speed_wall = =math.ceil(speed_print * 30 / 55) +support_angle = 60 +support_bottom_distance = =support_z_distance / 2 +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +top_bottom_thickness = 1.2 +wall_line_width_x = 0.23 +wall_thickness = 1.3 + diff --git a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg index 6bd491032e..b2ad86ff01 100644 --- a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker3_extended [metadata] author = ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/variants/ultimaker3_extended_aa04.inst.cfg b/resources/variants/ultimaker3_extended_aa04.inst.cfg index 15c53b5930..fdea4de08c 100644 --- a/resources/variants/ultimaker3_extended_aa04.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa04.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker3_extended [metadata] author = ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] brim_width = 7 diff --git a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg index e75545b7f9..6ab16c4f10 100644 --- a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker3_extended [metadata] author = ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] acceleration_enabled = True diff --git a/resources/variants/ultimaker3_extended_bb04.inst.cfg b/resources/variants/ultimaker3_extended_bb04.inst.cfg index a62480bd75..ee2f138754 100644 --- a/resources/variants/ultimaker3_extended_bb04.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb04.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker3_extended [metadata] author = ultimaker type = variant -setting_version = 3 +setting_version = 4 [values] acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 66b4d51b04..6ed2c6649b 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -251,7 +251,7 @@ def test_getPropertyFallThrough(extruder_stack): for type_id, type_name in container_indices.IndexTypeMap.items(): container = unittest.mock.MagicMock() # Return type_id when asking for value and -1 when asking for limit_to_extruder - container.getProperty = lambda key, property, type_id = type_id: type_id if (key == "layer_height" and property == "value") else (None if property != "limit_to_extruder" else "-1") #Returns the container type ID as layer height, in order to identify it. + container.getProperty = lambda key, property, context = None, type_id = type_id: type_id if (key == "layer_height" and property == "value") else (None if property != "limit_to_extruder" else "-1") #Returns the container type ID as layer height, in order to identify it. container.hasProperty = lambda key, property: key == "layer_height" container.getMetaDataEntry = unittest.mock.MagicMock(return_value = type_name) mock_layer_heights[type_id] = container diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 89dd76aec1..afd3d2b425 100755 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -63,7 +63,7 @@ def test_addContainer(global_stack): ## Tests adding extruders to the global stack. def test_addExtruder(global_stack): mock_definition = unittest.mock.MagicMock() - mock_definition.getProperty = lambda key, property: 2 if key == "machine_extruder_count" and property == "value" else None + mock_definition.getProperty = lambda key, property, context = None: 2 if key == "machine_extruder_count" and property == "value" else None with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): global_stack.definition = mock_definition @@ -318,7 +318,7 @@ def test_getPropertyFallThrough(global_stack): container_indexes = cura.Settings.CuraContainerStack._ContainerIndexes #Cache. for type_id, type_name in container_indexes.IndexTypeMap.items(): container = unittest.mock.MagicMock() - container.getProperty = lambda key, property, type_id = type_id: type_id if (key == "layer_height" and property == "value") else None #Returns the container type ID as layer height, in order to identify it. + container.getProperty = lambda key, property, context = None, type_id = type_id: type_id if (key == "layer_height" and property == "value") else None #Returns the container type ID as layer height, in order to identify it. container.hasProperty = lambda key, property: key == "layer_height" container.getMetaDataEntry = unittest.mock.MagicMock(return_value = type_name) mock_layer_heights[type_id] = container @@ -355,7 +355,7 @@ def test_getPropertyFallThrough(global_stack): ## In definitions, test whether having no resolve allows us to find the value. def test_getPropertyNoResolveInDefinition(global_stack): value = unittest.mock.MagicMock() #Just sets the value for bed temperature. - value.getProperty = lambda key, property: 10 if (key == "material_bed_temperature" and property == "value") else None + value.getProperty = lambda key, property, context = None: 10 if (key == "material_bed_temperature" and property == "value") else None with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. global_stack.definition = value @@ -365,7 +365,7 @@ def test_getPropertyNoResolveInDefinition(global_stack): # must get the resolve first. def test_getPropertyResolveInDefinition(global_stack): resolve_and_value = unittest.mock.MagicMock() #Sets the resolve and value for bed temperature. - resolve_and_value.getProperty = lambda key, property: (7.5 if property == "resolve" else 5) if (key == "material_bed_temperature" and property in ("resolve", "value")) else None #7.5 resolve, 5 value. + resolve_and_value.getProperty = lambda key, property, context = None: (7.5 if property == "resolve" else 5) if (key == "material_bed_temperature" and property in ("resolve", "value")) else None #7.5 resolve, 5 value. with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. global_stack.definition = resolve_and_value @@ -378,9 +378,9 @@ def test_getPropertyResolveInInstance(global_stack): instance_containers = {} for container_type in container_indices.IndexTypeMap: instance_containers[container_type] = unittest.mock.MagicMock() #Sets the resolve and value for bed temperature. - instance_containers[container_type].getProperty = lambda key, property: (7.5 if property == "resolve" else (InstanceState.User if property == "state" else (5 if property != "limit_to_extruder" else "-1"))) if (key == "material_bed_temperature") else None #7.5 resolve, 5 value. + instance_containers[container_type].getProperty = lambda key, property, context = None: (7.5 if property == "resolve" else (InstanceState.User if property == "state" else (5 if property != "limit_to_extruder" else "-1"))) if (key == "material_bed_temperature") else None #7.5 resolve, 5 value. instance_containers[container_type].getMetaDataEntry = unittest.mock.MagicMock(return_value = container_indices.IndexTypeMap[container_type]) #Make queries for the type return the desired type. - instance_containers[container_indices.Definition].getProperty = lambda key, property: 10 if (key == "material_bed_temperature" and property == "value") else None #Definition only has value. + instance_containers[container_indices.Definition].getProperty = lambda key, property, context = None: 10 if (key == "material_bed_temperature" and property == "value") else None #Definition only has value. with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. global_stack.definition = instance_containers[container_indices.Definition] #Stack must have a definition. @@ -402,10 +402,10 @@ def test_getPropertyResolveInInstance(global_stack): # definitions. def test_getPropertyInstancesBeforeResolve(global_stack): value = unittest.mock.MagicMock() #Sets just the value. - value.getProperty = lambda key, property: (10 if property == "value" else (InstanceState.User if property != "limit_to_extruder" else "-1")) if key == "material_bed_temperature" else None + value.getProperty = lambda key, property, context = None: (10 if property == "value" else (InstanceState.User if property != "limit_to_extruder" else "-1")) if key == "material_bed_temperature" else None value.getMetaDataEntry = unittest.mock.MagicMock(return_value = "quality") resolve = unittest.mock.MagicMock() #Sets just the resolve. - resolve.getProperty = lambda key, property: 7.5 if (key == "material_bed_temperature" and property == "resolve") else None + resolve.getProperty = lambda key, property, context = None: 7.5 if (key == "material_bed_temperature" and property == "resolve") else None with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. global_stack.definition = resolve