diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 2f880a9e32..8e56787aeb 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -11,23 +11,24 @@ Information about how to find the log file can be found at https://github.com/Ul Thank you for using Cura! --> -**Application Version** - +**Application version** +(The version of the application this issue occurs with.) **Platform** - +(Information about the operating system the issue occurs on. Include at least the operating system. In the case of visual glitches/issues, also include information about your graphics drivers and GPU.) **Printer** - +(Which printer was selected in Cura? If possible, please attach project file as .curaproject.3mf.zip.) -**Steps to Reproduce** - +**Reproduction steps** +1. Something you did. +2. Something you did next. -**Actual Results** - +**Actual results** +(What happens after the above steps have been followed.) **Expected results** - +(What should happen after the above steps have been followed.) -**Additional Information** - +**Additional information** +(Extra information relevant to the issue, like screenshots. Don't forget to attach the log files with this issue report.) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index a7371e02a6..749b8037c1 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -22,22 +22,23 @@ Thank you for using Cura! --> **Application version** - +(The version of the application this issue occurs with.) **Platform** - +(Information about the operating system the issue occurs on. Include at least the operating system. In the case of visual glitches/issues, also include information about your graphics drivers and GPU.) **Printer** - +(Which printer was selected in Cura? If possible, please attach project file as .curaproject.3mf.zip.) **Reproduction steps** - +1. Something you did. +2. Something you did next. **Actual results** - +(What happens after the above steps have been followed.) **Expected results** - +(What should happen after the above steps have been followed.) **Additional information** - +(Extra information relevant to the issue, like screenshots. Don't forget to attach the log files with this issue report.) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 2a0a3e4e7b..a10d664a04 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -8,15 +8,16 @@ assignees: '' --- **Is your feature request related to a problem? Please describe.** - +(A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]) **Describe the solution you'd like** - +(A clear and concise description of what you want to happen. If possible, describe why you think this is a good solution.) **Describe alternatives you've considered** - +(A clear and concise description of any alternative solutions or features you've considered. Again, if possible, think about why these alternatives are not working out.) **Affected users and/or printers** - +(Who do you think will benefit from this? Is everyone going to benefit from these changes? Or specific kinds of users?) + **Additional context** - +(Add any other context or screenshots about the feature request here.) diff --git a/CMakeLists.txt b/CMakeLists.txt index b516de6b63..4954ac46dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,7 +49,7 @@ endif() if(NOT ${URANIUM_DIR} STREQUAL "") - set(CMAKE_MODULE_PATH "${URANIUM_DIR}/cmake") + set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${URANIUM_DIR}/cmake") endif() if(NOT ${URANIUM_SCRIPTS_DIR} STREQUAL "") list(APPEND CMAKE_MODULE_PATH ${URANIUM_DIR}/cmake) @@ -63,8 +63,8 @@ endif() install(DIRECTORY resources DESTINATION ${CMAKE_INSTALL_DATADIR}/cura) -install(DIRECTORY plugins - DESTINATION lib${LIB_SUFFIX}/cura) + +include(CuraPluginInstall) if(NOT APPLE AND NOT WIN32) install(FILES cura_app.py diff --git a/cmake/CuraPluginInstall.cmake b/cmake/CuraPluginInstall.cmake new file mode 100644 index 0000000000..d35e74acb8 --- /dev/null +++ b/cmake/CuraPluginInstall.cmake @@ -0,0 +1,99 @@ +# Copyright (c) 2019 Ultimaker B.V. +# CuraPluginInstall.cmake is released under the terms of the LGPLv3 or higher. + +# +# This module detects all plugins that need to be installed and adds them using the CMake install() command. +# It detects all plugin folder in the path "plugins/*" where there's a "plugin.json" in it. +# +# Plugins can be configured to NOT BE INSTALLED via the variable "CURA_NO_INSTALL_PLUGINS" as a list of string in the +# form of "a;b;c" or "a,b,c". By default all plugins will be installed. +# + +# FIXME: Remove the code for CMake <3.12 once we have switched over completely. +# FindPython3 is a new module since CMake 3.12. It deprecates FindPythonInterp and FindPythonLibs. The FindPython3 +# module is copied from the CMake repository here so in CMake <3.12 we can still use it. +if(${CMAKE_VERSION} VERSION_LESS 3.12) + # Use FindPythonInterp and FindPythonLibs for CMake <3.12 + find_package(PythonInterp 3 REQUIRED) + + set(Python3_EXECUTABLE ${PYTHON_EXECUTABLE}) +else() + # Use FindPython3 for CMake >=3.12 + find_package(Python3 REQUIRED COMPONENTS Interpreter) +endif() + +# Options or configuration variables +set(CURA_NO_INSTALL_PLUGINS "" CACHE STRING "A list of plugins that should not be installed, separated with ';' or ','.") + +file(GLOB_RECURSE _plugin_json_list ${CMAKE_SOURCE_DIR}/plugins/*/plugin.json) +list(LENGTH _plugin_json_list _plugin_json_list_len) + +# Sort the lists alphabetically so we can handle cases like this: +# - plugins/my_plugin/plugin.json +# - plugins/my_plugin/my_module/plugin.json +# In this case, only "plugins/my_plugin" should be added via install(). +set(_no_install_plugin_list ${CURA_NO_INSTALL_PLUGINS}) +# Sanitize the string so the comparison will be case-insensitive. +string(STRIP "${_no_install_plugin_list}" _no_install_plugin_list) +string(TOLOWER "${_no_install_plugin_list}" _no_install_plugin_list) + +# WORKAROUND counterpart of what's in cura-build. +string(REPLACE "," ";" _no_install_plugin_list "${_no_install_plugin_list}") + +list(LENGTH _no_install_plugin_list _no_install_plugin_list_len) + +if(_no_install_plugin_list_len GREATER 0) + list(SORT _no_install_plugin_list) +endif() +if(_plugin_json_list_len GREATER 0) + list(SORT _plugin_json_list) +endif() + +# Check all plugin directories and add them via install() if needed. +set(_install_plugin_list "") +foreach(_plugin_json_path ${_plugin_json_list}) + get_filename_component(_plugin_dir ${_plugin_json_path} DIRECTORY) + file(RELATIVE_PATH _rel_plugin_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_plugin_dir}) + get_filename_component(_plugin_dir_name ${_plugin_dir} NAME) + + # Make plugin name comparison case-insensitive + string(TOLOWER "${_plugin_dir_name}" _plugin_dir_name_lowercase) + + # Check if this plugin needs to be skipped for installation + set(_add_plugin ON) # Indicates if this plugin should be added to the build or not. + set(_is_no_install_plugin OFF) # If this plugin will not be added, this indicates if it's because the plugin is + # specified in the NO_INSTALL_PLUGINS list. + if(_no_install_plugin_list) + if("${_plugin_dir_name_lowercase}" IN_LIST _no_install_plugin_list) + set(_add_plugin OFF) + set(_is_no_install_plugin ON) + endif() + endif() + + # Make sure this is not a subdirectory in a plugin that's already in the install list + if(_add_plugin) + foreach(_known_install_plugin_dir ${_install_plugin_list}) + if(_plugin_dir MATCHES "${_known_install_plugin_dir}.+") + set(_add_plugin OFF) + break() + endif() + endforeach() + endif() + + if(_add_plugin) + message(STATUS "[+] PLUGIN TO INSTALL: ${_rel_plugin_dir}") + get_filename_component(_rel_plugin_parent_dir ${_rel_plugin_dir} DIRECTORY) + install(DIRECTORY ${_rel_plugin_dir} + DESTINATION lib${LIB_SUFFIX}/cura/${_rel_plugin_parent_dir} + PATTERN "__pycache__" EXCLUDE + PATTERN "*.qmlc" EXCLUDE + ) + list(APPEND _install_plugin_list ${_plugin_dir}) + elseif(_is_no_install_plugin) + message(STATUS "[-] PLUGIN TO REMOVE : ${_rel_plugin_dir}") + execute_process(COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/mod_bundled_packages_json.py + -d ${CMAKE_CURRENT_SOURCE_DIR}/resources/bundled_packages + ${_plugin_dir_name} + RESULT_VARIABLE _mod_json_result) + endif() +endforeach() diff --git a/cmake/mod_bundled_packages_json.py b/cmake/mod_bundled_packages_json.py new file mode 100755 index 0000000000..6423591f57 --- /dev/null +++ b/cmake/mod_bundled_packages_json.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +# +# This script removes the given package entries in the bundled_packages JSON files. This is used by the PluginInstall +# CMake module. +# + +import argparse +import collections +import json +import os +import sys + + +## Finds all JSON files in the given directory recursively and returns a list of those files in absolute paths. +# +# \param work_dir The directory to look for JSON files recursively. +# \return A list of JSON files in absolute paths that are found in the given directory. +def find_json_files(work_dir: str) -> list: + json_file_list = [] + for root, dir_names, file_names in os.walk(work_dir): + for file_name in file_names: + abs_path = os.path.abspath(os.path.join(root, file_name)) + json_file_list.append(abs_path) + return json_file_list + + +## Removes the given entries from the given JSON file. The file will modified in-place. +# +# \param file_path The JSON file to modify. +# \param entries A list of strings as entries to remove. +# \return None +def remove_entries_from_json_file(file_path: str, entries: list) -> None: + try: + with open(file_path, "r", encoding = "utf-8") as f: + package_dict = json.load(f, object_hook = collections.OrderedDict) + except Exception as e: + msg = "Failed to load '{file_path}' as a JSON file. This file will be ignored Exception: {e}"\ + .format(file_path = file_path, e = e) + sys.stderr.write(msg + os.linesep) + return + + for entry in entries: + if entry in package_dict: + del package_dict[entry] + print("[INFO] Remove entry [{entry}] from [{file_path}]".format(file_path = file_path, entry = entry)) + + try: + with open(file_path, "w", encoding = "utf-8", newline = "\n") as f: + json.dump(package_dict, f, indent = 4) + except Exception as e: + msg = "Failed to write '{file_path}' as a JSON file. Exception: {e}".format(file_path = file_path, e = e) + raise IOError(msg) + + +def main() -> None: + parser = argparse.ArgumentParser("mod_bundled_packages_json") + parser.add_argument("-d", "--dir", dest = "work_dir", + help = "The directory to look for bundled packages JSON files, recursively.") + parser.add_argument("entries", metavar = "ENTRIES", type = str, nargs = "+") + + args = parser.parse_args() + + json_file_list = find_json_files(args.work_dir) + for json_file_path in json_file_list: + remove_entries_from_json_file(json_file_path, args.entries) + + +if __name__ == "__main__": + main() diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 9c2fd1b931..5dfe0ad041 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -224,7 +224,7 @@ class CuraApplication(QtApplication): self._quality_management_model = None self._discovered_printer_model = DiscoveredPrintersModel(self, parent = self) - self._first_start_machine_actions_model = FirstStartMachineActionsModel(self, parent = self) + self._first_start_machine_actions_model = None self._welcome_pages_model = WelcomePagesModel(self, parent = self) self._add_printer_pages_model = AddPrinterPagesModel(self, parent = self) self._whats_new_pages_model = WhatsNewPagesModel(self, parent = self) @@ -517,7 +517,8 @@ class CuraApplication(QtApplication): with self._container_registry.lockFile(): self._container_registry.loadAllMetadata() - # set the setting version for Preferences + self.showSplashMessage(self._i18n_catalog.i18nc("@info:progress", "Setting up preferences...")) + # Set the setting version for Preferences preferences = self.getPreferences() preferences.addPreference("metadata/setting_version", 0) preferences.setValue("metadata/setting_version", self.SettingVersion) #Don't make it equal to the default so that the setting version always gets written to the file. @@ -879,6 +880,10 @@ class CuraApplication(QtApplication): @pyqtSlot(result = QObject) def getFirstStartMachineActionsModel(self, *args) -> "FirstStartMachineActionsModel": + if self._first_start_machine_actions_model is None: + self._first_start_machine_actions_model = FirstStartMachineActionsModel(self, parent = self) + if self.started: + self._first_start_machine_actions_model.initialize() return self._first_start_machine_actions_model @pyqtSlot(result = QObject) diff --git a/cura/Machines/Models/FirstStartMachineActionsModel.py b/cura/Machines/Models/FirstStartMachineActionsModel.py index ce0e9bf856..92caed7b12 100644 --- a/cura/Machines/Models/FirstStartMachineActionsModel.py +++ b/cura/Machines/Models/FirstStartMachineActionsModel.py @@ -33,11 +33,11 @@ class FirstStartMachineActionsModel(ListModel): self._current_action_index = 0 self._application = application - self._application.initializationFinished.connect(self._initialize) + self._application.initializationFinished.connect(self.initialize) self._previous_global_stack = None - def _initialize(self) -> None: + def initialize(self) -> None: self._application.getMachineManager().globalContainerChanged.connect(self._update) self._update() diff --git a/cura/Machines/Models/IntentCategoryModel.py b/cura/Machines/Models/IntentCategoryModel.py index add70f4c1a..a968d12b7a 100644 --- a/cura/Machines/Models/IntentCategoryModel.py +++ b/cura/Machines/Models/IntentCategoryModel.py @@ -1,7 +1,7 @@ #Copyright (c) 2019 Ultimaker B.V. #Cura is released under the terms of the LGPLv3 or higher. -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, QTimer import collections from typing import TYPE_CHECKING, Optional, Dict @@ -35,15 +35,19 @@ class IntentCategoryModel(ListModel): _translations["default"] = { "name": catalog.i18nc("@label", "Default") } + _translations["visual"] = { + "name": catalog.i18nc("@label", "Visual"), + "description": catalog.i18nc("@text", "Optimized for appearance") + } _translations["engineering"] = { "name": catalog.i18nc("@label", "Engineering"), - "description": catalog.i18nc("@text", "Suitable for engineering work") + "description": catalog.i18nc("@text", "Optimized for higher accuracy") + } + _translations["quick"] = { + "name": catalog.i18nc("@label", "Draft"), + "description": catalog.i18nc("@text", "Optimized for fast results") + } - } - _translations["smooth"] = { - "name": catalog.i18nc("@label", "Smooth"), - "description": catalog.i18nc("@text", "Optimized for a smooth surfaces") - } ## Creates a new model for a certain intent category. # \param The category to list the intent profiles for. @@ -69,6 +73,11 @@ class IntentCategoryModel(ListModel): extruder_manager = application.getExtruderManager() extruder_manager.extrudersChanged.connect(self.update) + self._update_timer = QTimer() + self._update_timer.setInterval(500) + self._update_timer.setSingleShot(True) + self._update_timer.timeout.connect(self._update) + self.update() ## Updates the list of intents if an intent profile was added or removed. @@ -76,8 +85,11 @@ class IntentCategoryModel(ListModel): if container.getMetaDataEntry("type") == "intent": self.update() + def update(self): + self._update_timer.start() + ## Updates the list of intents. - def update(self) -> None: + def _update(self) -> None: available_categories = IntentManager.getInstance().currentAvailableIntentCategories() result = [] for category in available_categories: diff --git a/cura/Machines/VariantNode.py b/cura/Machines/VariantNode.py index 334a01158b..b93be9773e 100644 --- a/cura/Machines/VariantNode.py +++ b/cura/Machines/VariantNode.py @@ -83,7 +83,7 @@ class VariantNode(ContainerNode): # if there is no match. def preferredMaterial(self, approximate_diameter: int) -> MaterialNode: for base_material, material_node in self.materials.items(): - if self.machine.preferred_material in base_material and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")): + if self.machine.preferred_material == base_material and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")): return material_node # First fallback: Choose any material with matching diameter. for material_node in self.materials.values(): diff --git a/cura/PrinterOutput/FirmwareUpdater.py b/cura/PrinterOutput/FirmwareUpdater.py index 3f20e0f3c4..56e260a7f0 100644 --- a/cura/PrinterOutput/FirmwareUpdater.py +++ b/cura/PrinterOutput/FirmwareUpdater.py @@ -20,7 +20,7 @@ class FirmwareUpdater(QObject): self._output_device = output_device - self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True) + self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True, name = "FirmwareUpdateThread") self._firmware_file = "" self._firmware_progress = 0 @@ -43,7 +43,7 @@ class FirmwareUpdater(QObject): ## Cleanup after a succesful update def _cleanupAfterUpdate(self) -> None: # Clean up for next attempt. - self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True) + self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True, name = "FirmwareUpdateThread") self._firmware_file = "" self._onFirmwareProgress(100) self._setFirmwareUpdateState(FirmwareUpdateState.completed) diff --git a/cura/PrinterOutput/Models/PrinterOutputModel.py b/cura/PrinterOutput/Models/PrinterOutputModel.py index a1a23201fb..37135bf663 100644 --- a/cura/PrinterOutput/Models/PrinterOutputModel.py +++ b/cura/PrinterOutput/Models/PrinterOutputModel.py @@ -35,6 +35,7 @@ class PrinterOutputModel(QObject): self._target_bed_temperature = 0 # type: float self._name = "" self._key = "" # Unique identifier + self._unique_name = "" # Unique name (used in Connect) self._controller = output_controller self._controller.canUpdateFirmwareChanged.connect(self._onControllerCanUpdateFirmwareChanged) self._extruders = [ExtruderOutputModel(printer = self, position = i) for i in range(number_of_extruders)] @@ -190,6 +191,15 @@ class PrinterOutputModel(QObject): self._name = name self.nameChanged.emit() + @pyqtProperty(str, notify = nameChanged) + def uniqueName(self) -> str: + return self._unique_name + + def updateUniqueName(self, unique_name: str) -> None: + if self._unique_name != unique_name: + self._unique_name = unique_name + self.nameChanged.emit() + ## Update the bed temperature. This only changes it locally. def updateBedTemperature(self, temperature: float) -> None: if self._bed_temperature != temperature: diff --git a/cura/PrinterOutput/PrinterOutputDevice.py b/cura/PrinterOutput/PrinterOutputDevice.py index ae916e434b..b05e76ad2e 100644 --- a/cura/PrinterOutput/PrinterOutputDevice.py +++ b/cura/PrinterOutput/PrinterOutputDevice.py @@ -220,6 +220,9 @@ class PrinterOutputDevice(QObject, OutputDevice): if printer.printerConfiguration is not None and printer.printerConfiguration.hasAnyMaterialLoaded(): all_configurations.add(printer.printerConfiguration) all_configurations.update(printer.availableConfigurations) + if None in all_configurations: # Shouldn't happen, but it does. I don't see how it could ever happen. Skip adding that configuration. List could end up empty! + Logger.log("e", "Found a broken configuration in the synced list!") + all_configurations.remove(None) new_configurations = sorted(all_configurations, key = lambda config: config.printerType or "") if new_configurations != self._unique_configurations: self._unique_configurations = new_configurations diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index aa48e39410..d7a7586115 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -872,7 +872,10 @@ class MachineManager(QObject): def numberExtrudersEnabled(self) -> int: if self._global_container_stack is None: return 1 - return self._global_container_stack.definitionChanges.getProperty("extruders_enabled_count", "value") + extruders_enabled_count = self._global_container_stack.definitionChanges.getProperty("extruders_enabled_count", "value") + if extruders_enabled_count is None: + extruders_enabled_count = len(self._global_container_stack.extruderList) + return extruders_enabled_count @pyqtProperty(str, notify = extruderChanged) def defaultExtruderPosition(self) -> str: diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py index 12b541c3d8..7db579bf3f 100644 --- a/cura/Settings/SettingInheritanceManager.py +++ b/cura/Settings/SettingInheritanceManager.py @@ -28,20 +28,21 @@ if TYPE_CHECKING: class SettingInheritanceManager(QObject): def __init__(self, parent = None) -> None: super().__init__(parent) - Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) + self._global_container_stack = None # type: Optional[ContainerStack] self._settings_with_inheritance_warning = [] # type: List[str] self._active_container_stack = None # type: Optional[ExtruderStack] - self._onGlobalContainerChanged() - - ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderChanged) - self._onActiveExtruderChanged() self._update_timer = QTimer() self._update_timer.setInterval(500) self._update_timer.setSingleShot(True) self._update_timer.timeout.connect(self._update) + Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) + ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderChanged) + self._onGlobalContainerChanged() + self._onActiveExtruderChanged() + settingsWithIntheritanceChanged = pyqtSignal() ## Get the keys of all children settings with an override. @@ -88,8 +89,8 @@ class SettingInheritanceManager(QObject): self.settingsWithIntheritanceChanged.emit() @pyqtSlot() - def forceUpdate(self) -> None: - self._update() + def scheduleUpdate(self) -> None: + self._update_timer.start() def _onActiveExtruderChanged(self) -> None: new_active_stack = ExtruderManager.getInstance().getActiveExtruderStack() @@ -106,7 +107,7 @@ class SettingInheritanceManager(QObject): if self._active_container_stack is not None: self._active_container_stack.propertyChanged.connect(self._onPropertyChanged) self._active_container_stack.containersChanged.connect(self._onContainersChanged) - self._update() # Ensure that the settings_with_inheritance_warning list is populated. + self._update_timer.start() # Ensure that the settings_with_inheritance_warning list is populated. def _onPropertyChanged(self, key: str, property_name: str) -> None: if (property_name == "value" or property_name == "enabled") and self._global_container_stack: diff --git a/cura_app.py b/cura_app.py index 080479ee92..e14b4410bc 100755 --- a/cura_app.py +++ b/cura_app.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import argparse @@ -131,7 +131,10 @@ def exceptHook(hook_type, value, traceback): # Set exception hook to use the crash dialog handler sys.excepthook = exceptHook # Enable dumping traceback for all threads -faulthandler.enable(all_threads = True) +if sys.stderr: + faulthandler.enable(file = sys.stderr, all_threads = True) +else: + faulthandler.enable(file = sys.stdout, all_threads = True) # Workaround for a race condition on certain systems where there # is a race condition between Arcus and PyQt. Importing Arcus diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 29a6d8ff30..43d54d8b12 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import numpy @@ -72,7 +72,7 @@ class GcodeStartEndFormatter(Formatter): value = default_value_str # "-1" is global stack, and if the setting value exists in the global stack, use it as the fallback value. if key in kwargs["-1"]: - value = kwargs["-1"] + value = kwargs["-1"][key] if str(extruder_nr) in kwargs and key in kwargs[str(extruder_nr)]: value = kwargs[str(extruder_nr)][key] diff --git a/plugins/ImageReader/ConfigUI.qml b/plugins/ImageReader/ConfigUI.qml index 47ba10778c..0429fae4e1 100644 --- a/plugins/ImageReader/ConfigUI.qml +++ b/plugins/ImageReader/ConfigUI.qml @@ -143,6 +143,52 @@ UM.Dialog } } + UM.TooltipArea { + Layout.fillWidth:true + height: childrenRect.height + text: catalog.i18nc("@info:tooltip","For lithophanes a simple logarithmic model for translucency is available. For height maps the pixel values correspond to heights linearly.") + Row { + width: parent.width + + Label { + text: "Color Model" + width: 150 * screenScaleFactor + anchors.verticalCenter: parent.verticalCenter + } + ComboBox { + id: color_model + objectName: "ColorModel" + model: [ catalog.i18nc("@item:inlistbox","Linear"), catalog.i18nc("@item:inlistbox","Translucency") ] + width: 180 * screenScaleFactor + onCurrentIndexChanged: { manager.onColorModelChanged(currentIndex) } + } + } + } + + UM.TooltipArea { + Layout.fillWidth:true + height: childrenRect.height + text: catalog.i18nc("@info:tooltip","The percentage of light penetrating a print with a thickness of 1 millimeter. Lowering this value increases the contrast in dark regions and decreases the contrast in light regions of the image.") + visible: color_model.currentText == catalog.i18nc("@item:inlistbox","Translucency") + Row { + width: parent.width + + Label { + text: catalog.i18nc("@action:label", "1mm Transmittance (%)") + width: 150 * screenScaleFactor + anchors.verticalCenter: parent.verticalCenter + } + TextField { + id: transmittance + objectName: "Transmittance" + focus: true + validator: RegExpValidator {regExp: /^[1-9]\d{0,2}([\,|\.]\d*)?$/} + width: 180 * screenScaleFactor + onTextChanged: { manager.onTransmittanceChanged(text) } + } + } + } + UM.TooltipArea { Layout.fillWidth:true height: childrenRect.height diff --git a/plugins/ImageReader/ImageReader.py b/plugins/ImageReader/ImageReader.py index e720ce4854..d6c2827d16 100644 --- a/plugins/ImageReader/ImageReader.py +++ b/plugins/ImageReader/ImageReader.py @@ -3,6 +3,8 @@ import numpy +import math + from PyQt5.QtGui import QImage, qRed, qGreen, qBlue from PyQt5.QtCore import Qt @@ -46,9 +48,9 @@ class ImageReader(MeshReader): def _read(self, file_name): size = max(self._ui.getWidth(), self._ui.getDepth()) - return self._generateSceneNode(file_name, size, self._ui.peak_height, self._ui.base_height, self._ui.smoothing, 512, self._ui.lighter_is_higher) + return self._generateSceneNode(file_name, size, self._ui.peak_height, self._ui.base_height, self._ui.smoothing, 512, self._ui.lighter_is_higher, self._ui.use_transparency_model, self._ui.transmittance_1mm) - def _generateSceneNode(self, file_name, xz_size, peak_height, base_height, blur_iterations, max_size, lighter_is_higher): + def _generateSceneNode(self, file_name, xz_size, peak_height, base_height, blur_iterations, max_size, lighter_is_higher, use_transparency_model, transmittance_1mm): scene_node = SceneNode() mesh = MeshBuilder() @@ -99,12 +101,14 @@ class ImageReader(MeshReader): for x in range(0, width): for y in range(0, height): qrgb = img.pixel(x, y) - avg = float(qRed(qrgb) + qGreen(qrgb) + qBlue(qrgb)) / (3 * 255) - height_data[y, x] = avg + if use_transparency_model: + height_data[y, x] = (0.299 * math.pow(qRed(qrgb) / 255.0, 2.2) + 0.587 * math.pow(qGreen(qrgb) / 255.0, 2.2) + 0.114 * math.pow(qBlue(qrgb) / 255.0, 2.2)) + else: + height_data[y, x] = (0.212655 * qRed(qrgb) + 0.715158 * qGreen(qrgb) + 0.072187 * qBlue(qrgb)) / 255 # fast computation ignoring gamma and degamma Job.yieldThread() - if not lighter_is_higher: + if lighter_is_higher == use_transparency_model: height_data = 1 - height_data for _ in range(0, blur_iterations): @@ -124,8 +128,15 @@ class ImageReader(MeshReader): Job.yieldThread() - height_data *= scale_vector.y - height_data += base_height + if use_transparency_model: + divisor = 1.0 / math.log(transmittance_1mm / 100.0) # log-base doesn't matter here. Precompute this value for faster computation of each pixel. + min_luminance = (transmittance_1mm / 100.0) ** (peak_height - base_height) + for (y, x) in numpy.ndindex(height_data.shape): + mapped_luminance = min_luminance + (1.0 - min_luminance) * height_data[y, x] + height_data[y, x] = base_height + divisor * math.log(mapped_luminance) # use same base as a couple lines above this + else: + height_data *= scale_vector.y + height_data += base_height heightmap_face_count = 2 * height_minus_one * width_minus_one total_face_count = heightmap_face_count + (width_minus_one * 2) * (height_minus_one * 2) + 2 diff --git a/plugins/ImageReader/ImageReaderUI.py b/plugins/ImageReader/ImageReaderUI.py index 213468a2ab..a61fabb742 100644 --- a/plugins/ImageReader/ImageReaderUI.py +++ b/plugins/ImageReader/ImageReaderUI.py @@ -34,6 +34,8 @@ class ImageReaderUI(QObject): self.peak_height = 2.5 self.smoothing = 1 self.lighter_is_higher = False; + self.use_transparency_model = True; + self.transmittance_1mm = 50.0; # based on pearl PLA self._ui_lock = threading.Lock() self._cancelled = False @@ -75,6 +77,7 @@ class ImageReaderUI(QObject): self._ui_view.findChild(QObject, "Base_Height").setProperty("text", str(self.base_height)) self._ui_view.findChild(QObject, "Peak_Height").setProperty("text", str(self.peak_height)) + self._ui_view.findChild(QObject, "Transmittance").setProperty("text", str(self.transmittance_1mm)) self._ui_view.findChild(QObject, "Smoothing").setProperty("value", self.smoothing) def _createConfigUI(self): @@ -144,3 +147,11 @@ class ImageReaderUI(QObject): @pyqtSlot(int) def onImageColorInvertChanged(self, value): self.lighter_is_higher = (value == 1) + + @pyqtSlot(int) + def onColorModelChanged(self, value): + self.use_transparency_model = (value == 0) + + @pyqtSlot(int) + def onTransmittanceChanged(self, value): + self.transmittance_1mm = value diff --git a/plugins/PostProcessingPlugin/scripts/DisplayRemainingTimeOnLCD.py b/plugins/PostProcessingPlugin/scripts/DisplayRemainingTimeOnLCD.py new file mode 100644 index 0000000000..9152ab65f9 --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/DisplayRemainingTimeOnLCD.py @@ -0,0 +1,94 @@ +# Cura PostProcessingPlugin +# Author: Mathias Lyngklip Kjeldgaard +# Date: July 31, 2019 +# Modified: --- + +# Description: This plugin displayes the remaining time on the LCD of the printer +# using the estimated print-time generated by Cura. + + + + +from ..Script import Script + +import re +import datetime + + +class DisplayRemainingTimeOnLCD(Script): + + def __init__(self): + super().__init__() + + + def getSettingDataString(self): + return """{ + "name":"Disaplay Remaining Time on LCD", + "key":"DisplayRemainingTimeOnLCD", + "metadata": {}, + "version": 2, + "settings": + { + "TurnOn": + { + "label": "Enable", + "description": "When enabled, It will write Time Left: HHMMSS on the display", + "type": "bool", + "default_value": false + } + } + }""" + + def execute(self, data): + if self.getSettingValueByKey("TurnOn"): + total_time = 0 + total_time_string = "" + for layer in data: + layer_index = data.index(layer) + lines = layer.split("\n") + for line in lines: + if line.startswith(";TIME:"): + # At this point, we have found a line in the GCODE with ";TIME:" + # which is the indication of total_time. Looks like: ";TIME:1337", where + # 1337 is the total print time in seconds. + line_index = lines.index(line) # We take a hold of that line + split_string = re.split(":", line) # Then we split it, so we can get the number + + string_with_numbers = "{}".format(split_string[1]) # Here we insert that number from the + # list into a string. + total_time = int(string_with_numbers) # Only to contert it to a int. + + m, s = divmod(total_time, 60) # Math to calculate + h, m = divmod(m, 60) # hours, minutes and seconds. + total_time_string = "{:d}h{:02d}m{:02d}s".format(h, m, s) # Now we put it into the string + lines[line_index] = "M117 Time Left {}".format(total_time_string) # And print that string instead of the original one + + + + + elif line.startswith(";TIME_ELAPSED:"): + + # As we didnt find the total time (";TIME:"), we have found a elapsed time mark + # This time represents the time the printer have printed. So with some math; + # totalTime - printTime = RemainingTime. + line_index = lines.index(line) # We get a hold of the line + list_split = re.split(":", line) # Again, we split at ":" so we can get the number + string_with_numbers = "{}".format(list_split[1]) # Then we put that number from the list, into a string + + current_time = float(string_with_numbers) # This time we convert to a float, as the line looks something like: + # ;TIME_ELAPSED:1234.6789 + # which is total time in seconds + + time_left = total_time - current_time # Here we calculate remaining time + m1, s1 = divmod(time_left, 60) # And some math to get the total time in seconds into + h1, m1 = divmod(m1, 60) # the right format. (HH,MM,SS) + current_time_string = "{:d}h{:2d}m{:2d}s".format(int(h1), int(m1), int(s1)) # Here we create the string holding our time + lines[line_index] = "M117 Time Left {}".format(current_time_string) # And now insert that into the GCODE + + + # Here we are OUT of the second for-loop + # Which means we have found and replaces all the occurences. + # Which also means we are ready to join the lines for that section of the GCODE file. + final_lines = "\n".join(lines) + data[layer_index] = final_lines + return data diff --git a/plugins/PreviewStage/PreviewMain.qml b/plugins/PreviewStage/PreviewMain.qml index 1b8387644d..2926f0d012 100644 --- a/plugins/PreviewStage/PreviewMain.qml +++ b/plugins/PreviewStage/PreviewMain.qml @@ -12,14 +12,18 @@ import Cura 1.0 as Cura Item { + // An Item whose bounds are guaranteed to be safe for overlays to be placed. + // Defaults to parent, ie. the entire available area + property var safeArea: parent + // Subtract the actionPanel from the safe area. This way the view won't draw interface elements under/over it - Item { - id: safeArea - visible: false - anchors.left: parent.left - anchors.right: actionPanelWidget.left - anchors.top: parent.top - anchors.bottom: actionPanelWidget.top + Item + { + id: childSafeArea + x: safeArea.x - parent.x + y: safeArea.y - parent.y + width: actionPanelWidget.x - x + height: actionPanelWidget.y - y } Loader @@ -29,11 +33,11 @@ Item source: UM.Controller.activeView != null && UM.Controller.activeView.mainComponent != null ? UM.Controller.activeView.mainComponent : "" - Binding + onLoaded: { - target: previewMain.item - property: "safeArea" - value:safeArea + if (previewMain.item.safeArea !== undefined){ + previewMain.item.safeArea = Qt.binding(function() { return childSafeArea }); + } } } diff --git a/plugins/SimulationView/PathSlider.qml b/plugins/SimulationView/PathSlider.qml index c7a43c6407..facdbb6a53 100644 --- a/plugins/SimulationView/PathSlider.qml +++ b/plugins/SimulationView/PathSlider.qml @@ -56,6 +56,11 @@ Item return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue) } + onWidthChanged : { + // After a width change, the pixel-position of the handle is out of sync with the property value + setHandleValue(handleValue) + } + // slider track Rectangle { diff --git a/plugins/SimulationView/SimulationViewMainComponent.qml b/plugins/SimulationView/SimulationViewMainComponent.qml index cd7d108370..3b70c69e82 100644 --- a/plugins/SimulationView/SimulationViewMainComponent.qml +++ b/plugins/SimulationView/SimulationViewMainComponent.qml @@ -18,7 +18,10 @@ Item property bool isSimulationPlaying: false - readonly property var layerSliderSafeYMax: safeArea.y + safeArea.height + readonly property real layerSliderSafeYMin: safeArea.y + readonly property real layerSliderSafeYMax: safeArea.y + safeArea.height + readonly property real pathSliderSafeXMin: safeArea.x + playButton.width + readonly property real pathSliderSafeXMax: safeArea.x + safeArea.width visible: UM.SimulationView.layerActivity && CuraApplication.platformActivity @@ -26,13 +29,21 @@ Item PathSlider { id: pathSlider + + readonly property real preferredWidth: UM.Theme.getSize("slider_layerview_size").height // not a typo, should be as long as layerview slider + readonly property real margin: UM.Theme.getSize("default_margin").width + readonly property real pathSliderSafeWidth: pathSliderSafeXMax - pathSliderSafeXMin + height: UM.Theme.getSize("slider_handle").width - width: UM.Theme.getSize("slider_layerview_size").height + width: preferredWidth + margin * 2 < pathSliderSafeWidth ? preferredWidth : pathSliderSafeWidth - margin * 2 + anchors.bottom: parent.bottom - anchors.bottomMargin: UM.Theme.getSize("default_margin").height + anchors.bottomMargin: margin anchors.horizontalCenter: parent.horizontalCenter + anchors.horizontalCenterOffset: -(parent.width - pathSliderSafeXMax - pathSliderSafeXMin) / 2 // center between parent top and layerSliderSafeYMax + visible: !UM.SimulationView.compatibilityMode @@ -184,16 +195,19 @@ Item { property var preferredHeight: UM.Theme.getSize("slider_layerview_size").height property double heightMargin: UM.Theme.getSize("default_margin").height + property double layerSliderSafeHeight: layerSliderSafeYMax - layerSliderSafeYMin + //todo incorporate margins in safeHeight? + id: layerSlider width: UM.Theme.getSize("slider_handle").width - height: preferredHeight + heightMargin * 2 < layerSliderSafeYMax ? preferredHeight : layerSliderSafeYMax - heightMargin * 2 + height: preferredHeight + heightMargin * 2 < layerSliderSafeHeight ? preferredHeight : layerSliderSafeHeight - heightMargin * 2 anchors { right: parent.right verticalCenter: parent.verticalCenter - verticalCenterOffset: -(parent.height - layerSliderSafeYMax) / 2 // center between parent top and layerSliderSafeYMax + verticalCenterOffset: -(parent.height - layerSliderSafeYMax - layerSliderSafeYMin) / 2 // center between parent top and layerSliderSafeYMax rightMargin: UM.Theme.getSize("default_margin").width bottomMargin: heightMargin topMargin: heightMargin diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml index 91f4accee1..0a478c8543 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml @@ -63,41 +63,41 @@ Item verticalCenter: parent.verticalCenter } color: UM.Theme.getColor("monitor_text_primary") - font: UM.Theme.getFont("default") // 12pt, regular + font: UM.Theme.getFont("default") text: { if (!printJob) { - return "" + return ""; } switch (printJob.state) { case "wait_cleanup": if (printJob.timeTotal > printJob.timeElapsed) { - return catalog.i18nc("@label:status", "Aborted") + return catalog.i18nc("@label:status", "Aborted"); } - return catalog.i18nc("@label:status", "Finished") + return catalog.i18nc("@label:status", "Finished"); case "finished": - return catalog.i18nc("@label:status", "Finished") + return catalog.i18nc("@label:status", "Finished"); case "sent_to_printer": - return catalog.i18nc("@label:status", "Preparing...") + return catalog.i18nc("@label:status", "Preparing..."); case "pre_print": - return catalog.i18nc("@label:status", "Preparing...") + return catalog.i18nc("@label:status", "Preparing..."); case "aborting": // NOTE: Doesn't exist but maybe should someday - return catalog.i18nc("@label:status", "Aborting...") + return catalog.i18nc("@label:status", "Aborting..."); case "aborted": // NOTE: Unused, see above - return catalog.i18nc("@label:status", "Aborted") + return catalog.i18nc("@label:status", "Aborted"); case "pausing": - return catalog.i18nc("@label:status", "Pausing...") + return catalog.i18nc("@label:status", "Pausing..."); case "paused": - return catalog.i18nc("@label:status", "Paused") + return catalog.i18nc("@label:status", "Paused"); case "resuming": - return catalog.i18nc("@label:status", "Resuming...") + return catalog.i18nc("@label:status", "Resuming..."); case "queued": - return catalog.i18nc("@label:status", "Action required") + return catalog.i18nc("@label:status", "Action required"); default: - return catalog.i18nc("@label:status", "Finishes %1 at %2".arg(OutputDevice.getDateCompleted( printJob.timeRemaining )).arg(OutputDevice.getTimeCompleted( printJob.timeRemaining ))) + return catalog.i18nc("@label:status", "Finishes %1 at %2".arg(OutputDevice.getDateCompleted(printJob.timeRemaining)).arg(OutputDevice.getTimeCompleted(printJob.timeRemaining))); } } width: contentWidth diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml index bcba60352c..6d9f375788 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml @@ -1,52 +1,57 @@ // Copyright (c) 2019 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. - import QtQuick 2.2 import QtQuick.Window 2.2 import QtQuick.Controls 1.2 import UM 1.1 as UM UM.Dialog { + id: base; + title: catalog.i18nc("@title:window", "Print over network"); + width: minimumWidth; height: minimumHeight; - leftButtons: [ - Button { - enabled: true; - onClicked: { - base.visible = false; - printerSelectionCombobox.currentIndex = 0; - OutputDevice.cancelPrintSelection(); - } - text: catalog.i18nc("@action:button","Cancel"); - } - ] maximumHeight: minimumHeight; maximumWidth: minimumWidth; minimumHeight: 140 * screenScaleFactor; minimumWidth: 500 * screenScaleFactor; modality: Qt.ApplicationModal; - onVisibleChanged: { - if (visible) { - resetPrintersModel(); - } else { - OutputDevice.cancelPrintSelection(); + + Component.onCompleted: { + populateComboBox() + } + + // populates the combo box with the correct printer values + function populateComboBox() { + comboBoxPrintersModel.clear(); + comboBoxPrintersModel.append({ name: "Automatic", key: "" }); // Connect will just do it's thing + for (var i in OutputDevice.printers) { + comboBoxPrintersModel.append({ + name: OutputDevice.printers[i].name, + key: OutputDevice.printers[i].uniqueName + }); } } + + leftButtons: [ + Button { + enabled: true; + onClicked: { + base.close(); + } + text: catalog.i18nc("@action:button","Cancel"); + } + ] rightButtons: [ Button { enabled: true; onClicked: { - base.visible = false; - OutputDevice.selectPrinter(printerSelectionCombobox.model.get(printerSelectionCombobox.currentIndex).key); - // reset to defaults - printerSelectionCombobox.currentIndex = 0; + OutputDevice.selectTargetPrinter(printerComboBox.model.get(printerComboBox.currentIndex).key); + base.close(); } text: catalog.i18nc("@action:button","Print"); } ] - title: catalog.i18nc("@title:window", "Print over network"); - visible: true; - width: minimumWidth; Column { id: printerSelection; @@ -59,10 +64,6 @@ UM.Dialog { } height: 50 * screenScaleFactor; - SystemPalette { - id: palette; - } - UM.I18nCatalog { id: catalog; name: "cura"; @@ -82,23 +83,14 @@ UM.Dialog { } ComboBox { - id: printerSelectionCombobox; + id: printerComboBox; Behavior on height { NumberAnimation { duration: 100 } } height: 40 * screenScaleFactor; model: ListModel { - id: printersModel; + id: comboBoxPrintersModel; } textRole: "name"; width: parent.width; } } - - // Utils - function resetPrintersModel() { - printersModel.clear(); - printersModel.append({ name: "Automatic", key: ""}); - for (var index in OutputDevice.printers) { - printersModel.append({name: OutputDevice.printers[index].name, key: OutputDevice.printers[index].key}); - } - } } diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py index 69daa1f08b..2e0912f057 100644 --- a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py @@ -79,6 +79,7 @@ class ClusterPrinterStatus(BaseModel): def updateOutputModel(self, model: PrinterOutputModel) -> None: model.updateKey(self.uuid) model.updateName(self.friendly_name) + model.updateUniqueName(self.unique_name) model.updateType(self.machine_variant) model.updateState(self.status if self.enabled else "disabled") model.updateBuildplate(self.build_plate.type if self.build_plate else "glass") diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py index f61982b9a8..6a8b9f625c 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -135,7 +135,7 @@ class ClusterApiClient: result = model_class(**response) # type: ClusterApiClientModel on_finished_item = cast(Callable[[ClusterApiClientModel], Any], on_finished) on_finished_item(result) - except (JSONDecodeError, TypeError): + except (JSONDecodeError, TypeError, ValueError): Logger.log("e", "Could not parse response from network: %s", str(response)) ## Creates a callback function so that it includes the parsing of the response into the correct model. diff --git a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py index dd9c0a7d2a..1266afcca8 100644 --- a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py @@ -1,16 +1,17 @@ # Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. - +import os from typing import Optional, Dict, List, Callable, Any from PyQt5.QtGui import QDesktopServices -from PyQt5.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty +from PyQt5.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty, QObject from PyQt5.QtNetwork import QNetworkReply from UM.FileHandler.FileHandler import FileHandler from UM.i18n import i18nCatalog from UM.Logger import Logger from UM.Scene.SceneNode import SceneNode +from cura.CuraApplication import CuraApplication from cura.PrinterOutput.NetworkedPrinterOutputDevice import AuthState from cura.PrinterOutput.PrinterOutputDevice import ConnectionType @@ -42,6 +43,8 @@ class LocalClusterOutputDevice(UltimakerNetworkedPrinterOutputDevice): ) self._cluster_api = None # type: Optional[ClusterApiClient] + self._active_exported_job = None # type: Optional[ExportFileJob] + self._printer_select_dialog = None # type: Optional[QObject] # We don't have authentication over local networking, so we're always authenticated. self.setAuthenticationState(AuthState.Authenticated) @@ -129,17 +132,50 @@ class LocalClusterOutputDevice(UltimakerNetworkedPrinterOutputDevice): job.finished.connect(self._onPrintJobCreated) job.start() + ## Allows the user to choose a printer to print with from the printer selection dialogue. + # \param unique_name: The unique name of the printer to target. + @pyqtSlot(str, name="selectTargetPrinter") + def selectTargetPrinter(self, unique_name: str = "") -> None: + self._startPrintJobUpload(unique_name if unique_name != "" else None) + ## Handler for when the print job was created locally. # It can now be sent over the network. def _onPrintJobCreated(self, job: ExportFileJob) -> None: + self._active_exported_job = job + # TODO: add preference to enable/disable this feature? + if self.clusterSize > 1: + self._showPrinterSelectionDialog() # self._startPrintJobUpload will be triggered from this dialog + return + self._startPrintJobUpload() + + ## Shows a dialog allowing the user to select which printer in a group to send a job to. + def _showPrinterSelectionDialog(self) -> None: + if not self._printer_select_dialog: + plugin_path = CuraApplication.getInstance().getPluginRegistry().getPluginPath("UM3NetworkPrinting") or "" + path = os.path.join(plugin_path, "resources", "qml", "PrintWindow.qml") + self._printer_select_dialog = CuraApplication.getInstance().createQmlComponent(path, {"OutputDevice": self}) + if self._printer_select_dialog is not None: + self._printer_select_dialog.show() + + ## Upload the print job to the group. + def _startPrintJobUpload(self, unique_name: str = None) -> None: + if not self._active_exported_job: + Logger.log("e", "No active exported job to upload!") + return self._progress.show() parts = [ self._createFormPart("name=owner", bytes(self._getUserName(), "utf-8"), "text/plain"), - self._createFormPart("name=\"file\"; filename=\"%s\"" % job.getFileName(), job.getOutput()) + self._createFormPart("name=\"file\"; filename=\"%s\"" % self._active_exported_job.getFileName(), + self._active_exported_job.getOutput()) ] + # If a specific printer was selected we include the name in the request. + # FIXME: Connect should allow the printer UUID here instead of the 'unique_name'. + if unique_name is not None: + parts.append(self._createFormPart("name=require_printer_name", bytes(unique_name, "utf-8"), "text/plain")) # FIXME: move form posting to API client self.postFormWithParts("/cluster-api/v1/print_jobs/", parts, on_finished=self._onPrintUploadCompleted, on_progress=self._onPrintJobUploadProgress) + self._active_exported_job = None ## Handler for print job upload progress. def _onPrintJobUploadProgress(self, bytes_sent: int, bytes_total: int) -> None: diff --git a/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py b/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py index 0446af177b..421246fb95 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py @@ -43,7 +43,7 @@ class ZeroConfClient: Logger.logException("e", "Failed to create zeroconf instance.") return - self._service_changed_request_thread = Thread(target = self._handleOnServiceChangedRequests, daemon = True) + self._service_changed_request_thread = Thread(target = self._handleOnServiceChangedRequests, daemon = True, name = "ZeroConfServiceChangedThread") self._service_changed_request_thread.start() self._zero_conf_browser = ServiceBrowser(self._zero_conf, self.ZERO_CONF_NAME, [self._queueService]) diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index 4930835f58..c9758d88d4 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -61,7 +61,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._all_baud_rates = [115200, 250000, 500000, 230400, 57600, 38400, 19200, 9600] # Instead of using a timer, we really need the update to be as a thread, as reading from serial can block. - self._update_thread = Thread(target = self._update, daemon = True) + self._update_thread = Thread(target = self._update, daemon = True, name = "USBPrinterUpdate") self._last_temperature_request = None # type: Optional[int] self._firmware_idle_count = 0 @@ -212,7 +212,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._serial.close() # Re-create the thread so it can be started again later. - self._update_thread = Thread(target=self._update, daemon=True) + self._update_thread = Thread(target=self._update, daemon=True, name = "USBPrinterUpdate") self._serial = None ## Send a command to printer. diff --git a/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py b/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py index e8eefb1bb0..40927fe3a0 100644 --- a/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py +++ b/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py @@ -66,6 +66,13 @@ class VersionUpgrade43to44(VersionUpgrade): # Alternate skin rotation should be translated to top/bottom line directions. if "skin_alternate_rotation" in parser["values"] and parseBool(parser["values"]["skin_alternate_rotation"]): parser["values"]["skin_angles"] = "[45, 135, 0, 90]" + # Unit of adaptive layers topography size changed. + if "adaptive_layer_height_threshold" in parser["values"]: + val = parser["values"]["adaptive_layer_height_threshold"] + if val.startswith("="): + val = val[1:] + val = "=({val}) / 1000".format(val = val) # Convert microns to millimetres. Works even if the profile contained a formula. + parser["values"]["adaptive_layer_height_threshold"] = val result = io.StringIO() parser.write(result) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index ca0057adb4..90d6c8e2d8 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6658,30 +6658,26 @@ }, "flow_rate_max_extrusion_offset": { - "label": "Flow rate compensation max extrusion offset", - "description": "The maximum distance in mm to compensate.", + "label": "Flow Rate Compensation Max Extrusion Offset", + "description": "The maximum distance in mm to move the filament to compensate for changes in flow rate.", "unit": "mm", "type": "float", "minimum_value": "0", "maximum_value_warning": "10", "default_value": 0, - "value": "0", - "enabled": true, "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": false }, "flow_rate_extrusion_offset_factor": { - "label": "Flow rate compensation factor", - "description": "The multiplication factor for the flow rate -> distance translation.", + "label": "Flow Rate Compensation Factor", + "description": "How far to move the filament in order to compensate for changes in flow rate, as a percentage of how far the filament would move in one second of extrusion.", "unit": "%", "type": "float", "minimum_value": "0", "maximum_value_warning": "100", "default_value": 100, - "value": "100", - "enabled": true, "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": false @@ -6704,7 +6700,7 @@ "unit": "mm", "default_value": 3, "value": "machine_nozzle_head_distance", - "minimum_value": "0.0001", + "minimum_value": "0.001", "maximum_value_warning": "20", "enabled": "wireframe_enabled", "settable_per_mesh": false, @@ -6734,7 +6730,7 @@ "unit": "mm/s", "type": "float", "default_value": 5, - "minimum_value": "0.1", + "minimum_value": "0.05", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + machine_max_feedrate_z ** 2)", "maximum_value_warning": "50", "enabled": "wireframe_enabled", @@ -6750,11 +6746,11 @@ "unit": "mm/s", "type": "float", "default_value": 5, - "minimum_value": "0.1", + "minimum_value": "0.05", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "50", "enabled": "wireframe_enabled", - "value": "wireframe_printspeed", + "value": "wireframe_printspeed_flat", "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": false @@ -6766,7 +6762,7 @@ "unit": "mm/s", "type": "float", "default_value": 5, - "minimum_value": "0.1", + "minimum_value": "0.05", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + machine_max_feedrate_z ** 2)", "maximum_value_warning": "50", "enabled": "wireframe_enabled", @@ -6782,7 +6778,7 @@ "unit": "mm/s", "type": "float", "default_value": 5, - "minimum_value": "0.1", + "minimum_value": "0.05", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + machine_max_feedrate_z ** 2)", "maximum_value_warning": "50", "enabled": "wireframe_enabled", @@ -6798,7 +6794,7 @@ "unit": "mm/s", "type": "float", "default_value": 5, - "minimum_value": "0.1", + "minimum_value": "0.05", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "100", "value": "wireframe_printspeed", @@ -6921,7 +6917,7 @@ "default_value": 0.6, "minimum_value": "0", "maximum_value_warning": "2.0", - "enabled": "wireframe_enabled", + "enabled": "wireframe_enabled and wireframe_strategy == 'knot'", "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": false @@ -6935,7 +6931,7 @@ "default_value": 0.5, "minimum_value": "0", "maximum_value_warning": "wireframe_height", - "enabled": "wireframe_enabled", + "enabled": "wireframe_enabled and wireframe_strategy == 'compensate'", "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": false @@ -6949,7 +6945,7 @@ "default_value": 0.6, "minimum_value": "0", "maximum_value_warning": "wireframe_height", - "enabled": "wireframe_enabled", + "enabled": "wireframe_enabled and wireframe_strategy == 'compensate'", "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": false @@ -7072,17 +7068,18 @@ "default_value": 0.01, "unit": "mm", "settable_per_mesh": false, - "minimum_value": "0.0001", + "minimum_value": "0.001", "settable_per_extruder": false, "settable_per_meshgroup": false }, "adaptive_layer_height_threshold": { - "label": "Adaptive Layers Threshold", - "description": "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer.", + "label": "Adaptive Layers Topography Size", + "description": "Target horizontal distance between two adjacent layers. Reducing this setting causes thinner layers to be used to bring the edges of the layers closer together.", "type": "float", "enabled": "adaptive_layer_height_enabled", - "default_value": 200.0, + "default_value": 0.2, + "unit": "mm", "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": false diff --git a/resources/definitions/kupido.def.json b/resources/definitions/kupido.def.json index a81a40542b..ad0182a5f6 100644 --- a/resources/definitions/kupido.def.json +++ b/resources/definitions/kupido.def.json @@ -18,12 +18,12 @@ "supports_usb_connection": false, "machine_extruder_trains": { - "0": "alya3dp_extruder_0" + "0": "kupido_extruder_0" } }, "overrides": { - "machine_name": { "default_value": "ALYA 3DP" }, + "machine_name": { "default_value": "KUPIDO" }, "machine_heated_bed": { "default_value": true }, "machine_width": { "default_value": 195 }, "machine_height": { "default_value": 190 }, diff --git a/resources/definitions/strateo3d.def.json b/resources/definitions/strateo3d.def.json index 4ae8473285..2ee3650404 100644 --- a/resources/definitions/strateo3d.def.json +++ b/resources/definitions/strateo3d.def.json @@ -14,7 +14,7 @@ "has_variants": true, "preferred_variant_name": "Standard 0.6", "preferred_material": "emotiontech_pla", - "preferred_quality_type": "e", + "preferred_quality_type": "c", "variants_name": "Print Head", "machine_extruder_trains": { @@ -30,13 +30,14 @@ "machine_depth": { "default_value": 420 }, "machine_height": { "default_value": 495 }, "machine_heated_bed": { "default_value": true }, + "machine_heated_build_volume": { "default_value": true }, "machine_center_is_zero": { "default_value": false }, "machine_head_with_fans_polygon": { "default_value": [ [ -76, -51.8 ] , [ 25, -51.8 ] , [ 25, 38.2 ] , [ -76, 38.2 ] ] }, "gantry_height": { "value": "40" }, "machine_extruder_count": { "default_value": 2 }, "machine_gcode_flavor": { "default_value": "Marlin" }, "machine_start_gcode": { "default_value": "G28 \nG90 G1 X300 Y210 Z15 F6000 \nG92 E0" }, - "machine_end_gcode": { "default_value": "T1 \nM104 S0 \nT0 \nM104 S0 \nM140 S0 \nM141 S0 \nG91 \nG0 E-1 F1500 \nG0 z1 \nG90 \nG28 \nM801.2 \nM801.0 \nM84" }, + "machine_end_gcode": { "default_value": "T1 \nM104 S0 \nT0 \nM104 S0 \nM140 S0 \nM141 S0 \nG91 \nG0 z1 \nG90 \nG28 \nM801.0 \nM84 \nM192" }, "extruder_prime_pos_y": {"minimum_value": "0", "maximum_value": "machine_depth"}, "extruder_prime_pos_x": {"minimum_value": "0", "maximum_value": "machine_width"}, "machine_heat_zone_length": { "default_value": 7 }, @@ -46,17 +47,17 @@ "material_bed_temperature": { "maximum_value": "130" }, "material_bed_temperature_layer_0": { "maximum_value": "130" }, "extruder_prime_pos_abs": { "default_value": true }, - "machine_acceleration": { "default_value": 2000 }, + "machine_acceleration": { "default_value": 1500 }, "acceleration_enabled": { "value": false }, - "acceleration_layer_0": { "value": "acceleration_topbottom" }, - "acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 1000 / 2000)" }, - "acceleration_print": { "value": "2000" }, + "acceleration_print": { "value": "machine_acceleration" }, + "acceleration_wall": { "value": "math.ceil(acceleration_print * 1250 / acceleration_print)" }, + "acceleration_wall_0": { "value": "math.ceil(acceleration_print * 1000 / acceleration_print)" }, + "acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1250 / acceleration_print)" }, "acceleration_support": { "value": "acceleration_print" }, "acceleration_support_interface": { "value": "acceleration_topbottom" }, - "acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1000 / 2000)" }, - "acceleration_wall": { "value": "math.ceil(acceleration_print * 1500 / 2000)" }, - "acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 1000 / 1500)" }, + "acceleration_travel": { "value": "acceleration_print" }, + "acceleration_layer_0": { "value": "acceleration_topbottom" }, "adaptive_layer_height_variation": { "default_value": 0.1 }, "adaptive_layer_height_variation_step": { "default_value": 0.05 }, "adhesion_type": { "default_value": "skirt" }, diff --git a/resources/definitions/ultimaker_s3.def.json b/resources/definitions/ultimaker_s3.def.json index 7348c14a2a..efdc7cca0a 100644 --- a/resources/definitions/ultimaker_s3.def.json +++ b/resources/definitions/ultimaker_s3.def.json @@ -67,8 +67,6 @@ "extruder_prime_pos_abs": { "default_value": true }, "machine_start_gcode": { "default_value": "" }, "machine_end_gcode": { "default_value": "" }, - "prime_tower_position_x": { "value": "345" }, - "prime_tower_position_y": { "value": "222.5" }, "prime_blob_enable": { "enabled": true, "default_value": false }, "speed_travel": diff --git a/resources/extruders/bibo2_dual_extruder_0.def.json b/resources/extruders/bibo2_dual_extruder_0.def.json index b918d070be..91508ecc6d 100644 --- a/resources/extruders/bibo2_dual_extruder_0.def.json +++ b/resources/extruders/bibo2_dual_extruder_0.def.json @@ -1,45 +1,45 @@ { - "version": 2, - "name": "Extruder 1", - "inherits": "fdmextruder", - "metadata": { - "machine": "BIBO2 dual", - "position": "0" - }, - "overrides": { - "extruder_nr": { - "default_value": 0, - "maximum_value": "1" - }, - "material_diameter": { - "default_value": 1.75 - }, - "machine_nozzle_size": { - "default_value": 0.4 - }, - "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" - } - } + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "bibo2_dual", + "position": "0" + }, + "overrides": { + "extruder_nr": { + "default_value": 0, + "maximum_value": "1" + }, + "material_diameter": { + "default_value": 1.75 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "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" + } + } } diff --git a/resources/extruders/bibo2_dual_extruder_1.def.json b/resources/extruders/bibo2_dual_extruder_1.def.json index e0386188bb..129ad27273 100644 --- a/resources/extruders/bibo2_dual_extruder_1.def.json +++ b/resources/extruders/bibo2_dual_extruder_1.def.json @@ -1,45 +1,45 @@ { - "version": 2, - "name": "Extruder 2", - "inherits": "fdmextruder", - "metadata": { - "machine": "BIBO2 dual", - "position": "1" - }, - "overrides": { - "extruder_nr": { - "default_value": 1, - "maximum_value": "1" - }, - "material_diameter": { - "default_value": 1.75 - }, - "machine_nozzle_size": { - "default_value": 0.4 - }, - "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" - } - } + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "bibo2_dual", + "position": "1" + }, + "overrides": { + "extruder_nr": { + "default_value": 1, + "maximum_value": "1" + }, + "material_diameter": { + "default_value": 1.75 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "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" + } + } } diff --git a/resources/extruders/cr-x_extruder_0.def.json b/resources/extruders/cr-x_extruder_0.def.json index 4e73fd0e8e..d9b7b03021 100644 --- a/resources/extruders/cr-x_extruder_0.def.json +++ b/resources/extruders/cr-x_extruder_0.def.json @@ -3,7 +3,7 @@ "name": "Left Extruder", "inherits": "fdmextruder", "metadata": { - "machine": "Creality CR-X", + "machine": "creality_cr-x", "position": "0" }, diff --git a/resources/extruders/cr-x_extruder_1.def.json b/resources/extruders/cr-x_extruder_1.def.json index ed6056dab9..8e763df64f 100644 --- a/resources/extruders/cr-x_extruder_1.def.json +++ b/resources/extruders/cr-x_extruder_1.def.json @@ -3,7 +3,7 @@ "name": "Right Extruder", "inherits": "fdmextruder", "metadata": { - "machine": "Creality CR-X", + "machine": "creality_cr-x", "position": "1" }, diff --git a/resources/extruders/creatable_d3_extruder_0.def.json b/resources/extruders/creatable_d3_extruder_0.def.json index 6a805febd5..95883d0f69 100644 --- a/resources/extruders/creatable_d3_extruder_0.def.json +++ b/resources/extruders/creatable_d3_extruder_0.def.json @@ -3,7 +3,7 @@ "name": "Extruder 1", "inherits": "fdmextruder", "metadata": { - "machine": "Creatable_D3", + "machine": "creatable_d3", "position": "0" }, diff --git a/resources/extruders/hellbot_magna_i_extruder.def.json b/resources/extruders/hellbot_magna_i_extruder.def.json index dc63081bd2..70117c2aed 100644 --- a/resources/extruders/hellbot_magna_i_extruder.def.json +++ b/resources/extruders/hellbot_magna_i_extruder.def.json @@ -3,7 +3,7 @@ "name": "Extruder 1", "inherits": "fdmextruder", "metadata": { - "machine": "hellbot_magna_i", + "machine": "hellbot_magna_I", "position": "0" }, diff --git a/resources/extruders/key3d_tyro_extruder_0.def.json b/resources/extruders/key3d_tyro_extruder_0.def.json index 11619da332..f08ae351ab 100644 --- a/resources/extruders/key3d_tyro_extruder_0.def.json +++ b/resources/extruders/key3d_tyro_extruder_0.def.json @@ -3,7 +3,7 @@ "name": "0.4mm Nozzle", "inherits": "fdmextruder", "metadata": { - "machine": "Tyro", + "machine": "key3d_tyro", "position": "0" }, diff --git a/resources/extruders/ultimaker_s3_extruder_right.def.json b/resources/extruders/ultimaker_s3_extruder_right.def.json index 6771e1c0a8..7199710327 100644 --- a/resources/extruders/ultimaker_s3_extruder_right.def.json +++ b/resources/extruders/ultimaker_s3_extruder_right.def.json @@ -22,7 +22,7 @@ "machine_extruder_end_pos_x": { "default_value": 180 }, "machine_extruder_end_pos_y": { "default_value": 180 }, "machine_nozzle_head_distance": { "default_value": 4.2 }, - "extruder_prime_pos_x": { "default_value": 180 }, + "extruder_prime_pos_x": { "value": "machine_width + 3" }, "extruder_prime_pos_y": { "default_value": 6 }, "extruder_prime_pos_z": { "default_value": 2 } } diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index d15742a101..3059e4aa1d 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -2795,7 +2795,7 @@ msgstr "Selecteer eventuele upgrades die op deze Ultimaker Original zijn uitgevo #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:41 msgctxt "@label" msgid "Heated Build Plate (official kit or self-built)" -msgstr "Verwarmd Platform (officiële kit of eigenbouw)" +msgstr "Verwarmd Platform (officiële kit of zelf gebouwd)" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:119 msgctxt "@label:MonitorStatus" diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Draft_Print_Quick.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Draft_Print_Quick.inst.cfg new file mode 100644 index 0000000000..92d91840b5 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Draft_Print_Quick.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Quick +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +intent_category = quick +quality_type = draft +material = generic_abs +variant = AA 0.4 + +[values] +speed_infill = =speed_print +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +speed_layer_0 = 20 +top_bottom_thickness = =wall_thickness +wall_thickness = =line_width * 2 +fill_perimeter_gaps = nowhere +infill_sparse_density = 15 +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +wall_line_width_x = =line_width diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Fast_Print_Accurate.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Fast_Print_Accurate.inst.cfg new file mode 100644 index 0000000000..b3d58c0df9 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Fast_Print_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = fast +material = generic_abs +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Fast_Visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Fast_Visual.inst.cfg new file mode 100644 index 0000000000..35d0d86ab3 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Fast_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +quality_type = fast +intent_category = visual +material = generic_abs +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_High_Visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_High_Visual.inst.cfg new file mode 100644 index 0000000000..2b656dbc35 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_High_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +quality_type = high +intent_category = visual +material = generic_abs +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Normal_Quality_Accurate.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Normal_Quality_Accurate.inst.cfg new file mode 100644 index 0000000000..c85b3fce0e --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Normal_Quality_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = normal +material = generic_abs +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Normal_Visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Normal_Visual.inst.cfg new file mode 100644 index 0000000000..aff1d9d9f0 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_ABS_Normal_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +quality_type = normal +intent_category = visual +material = generic_abs +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Draft_Print_Quick.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Draft_Print_Quick.inst.cfg new file mode 100644 index 0000000000..1d990b83c0 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Draft_Print_Quick.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Quick +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +intent_category = quick +quality_type = draft +material = generic_pla +variant = AA 0.4 + +[values] +speed_infill = =speed_print +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +speed_layer_0 = 20 +top_bottom_thickness = =wall_thickness +wall_thickness = =line_width * 2 +fill_perimeter_gaps = nowhere +infill_sparse_density = 15 +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +wall_line_width_x = =line_width diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Print_Accurate.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Print_Accurate.inst.cfg new file mode 100644 index 0000000000..1f38e12c42 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Print_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = fast +material = generic_pla +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Visual.inst.cfg new file mode 100644 index 0000000000..92ea0837fe --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +quality_type = fast +intent_category = visual +material = generic_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_High_Visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_High_Visual.inst.cfg new file mode 100644 index 0000000000..97c7ab325c --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_High_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +quality_type = high +intent_category = visual +material = generic_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Quality_Accurate.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Quality_Accurate.inst.cfg new file mode 100644 index 0000000000..e529ff7656 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Quality_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = normal +material = generic_pla +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Visual.inst.cfg new file mode 100644 index 0000000000..e012264294 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +quality_type = normal +intent_category = visual +material = generic_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Draft_Print_Quick.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Draft_Print_Quick.inst.cfg new file mode 100644 index 0000000000..020a4bbc99 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Draft_Print_Quick.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Quick +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +intent_category = quick +quality_type = draft +material = generic_tough_pla +variant = AA 0.4 + +[values] +speed_infill = =speed_print +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +speed_layer_0 = 20 +top_bottom_thickness = =wall_thickness +wall_thickness = =line_width * 2 +fill_perimeter_gaps = nowhere +infill_sparse_density = 15 +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +wall_line_width_x = =line_width diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Print_Accurate.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Print_Accurate.inst.cfg new file mode 100644 index 0000000000..8c6727bdb0 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Print_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = fast +material = generic_tough_pla +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Visual.inst.cfg new file mode 100644 index 0000000000..9debbb6d43 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +quality_type = fast +intent_category = visual +material = generic_tough_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_High_Visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_High_Visual.inst.cfg new file mode 100644 index 0000000000..a57b040660 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_High_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +quality_type = high +intent_category = visual +material = generic_tough_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Quality_Accurate.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Quality_Accurate.inst.cfg new file mode 100644 index 0000000000..dd64f3f185 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Quality_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = normal +material = generic_tough_pla +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Visual.inst.cfg b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Visual.inst.cfg new file mode 100644 index 0000000000..0f31bcce25 --- /dev/null +++ b/resources/intent/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = intent +quality_type = normal +intent_category = visual +material = generic_tough_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/um_s5_aa0.4_ABS_Draft_Print_Quick.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print_Quick.inst.cfg similarity index 96% rename from resources/intent/um_s5_aa0.4_ABS_Draft_Print_Quick.inst.cfg rename to resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print_Quick.inst.cfg index f627fbf74b..14bb0e0f54 100644 --- a/resources/intent/um_s5_aa0.4_ABS_Draft_Print_Quick.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print_Quick.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker_s5 [metadata] setting_version = 10 type = intent -intent_category = smooth +intent_category = quick quality_type = draft material = generic_abs variant = AA 0.4 diff --git a/resources/intent/um_s5_aa0.4_ABS_Fast_Print_Accurate.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print_Accurate.inst.cfg similarity index 100% rename from resources/intent/um_s5_aa0.4_ABS_Fast_Print_Accurate.inst.cfg rename to resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print_Accurate.inst.cfg diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Visual.inst.cfg new file mode 100644 index 0000000000..0f10b8416b --- /dev/null +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +quality_type = fast +intent_category = visual +material = generic_abs +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_High_Visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_High_Visual.inst.cfg new file mode 100644 index 0000000000..b6ea956563 --- /dev/null +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_High_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +quality_type = high +intent_category = visual +material = generic_abs +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/um_s5_aa0.4_ABS_Normal_Quality_Accurate.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality_Accurate.inst.cfg similarity index 100% rename from resources/intent/um_s5_aa0.4_ABS_Normal_Quality_Accurate.inst.cfg rename to resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality_Accurate.inst.cfg diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Visual.inst.cfg new file mode 100644 index 0000000000..f26003ca30 --- /dev/null +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +quality_type = normal +intent_category = visual +material = generic_abs +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/um_s5_aa0.4_PLA_Draft_Print_Quick.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print_Quick.inst.cfg similarity index 96% rename from resources/intent/um_s5_aa0.4_PLA_Draft_Print_Quick.inst.cfg rename to resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print_Quick.inst.cfg index 553a68201d..86062ecf19 100644 --- a/resources/intent/um_s5_aa0.4_PLA_Draft_Print_Quick.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print_Quick.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker_s5 [metadata] setting_version = 10 type = intent -intent_category = smooth +intent_category = quick quality_type = draft material = generic_pla variant = AA 0.4 diff --git a/resources/intent/um_s5_aa0.4_PLA_Fast_Print_Accurate.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print_Accurate.inst.cfg similarity index 100% rename from resources/intent/um_s5_aa0.4_PLA_Fast_Print_Accurate.inst.cfg rename to resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print_Accurate.inst.cfg diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Visual.inst.cfg new file mode 100644 index 0000000000..b20fdcb791 --- /dev/null +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +quality_type = fast +intent_category = visual +material = generic_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_High_Visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_High_Visual.inst.cfg new file mode 100644 index 0000000000..3fc0006b3f --- /dev/null +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_High_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +quality_type = high +intent_category = visual +material = generic_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/um_s5_aa0.4_PLA_Normal_Quality_Accurate.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality_Accurate.inst.cfg similarity index 100% rename from resources/intent/um_s5_aa0.4_PLA_Normal_Quality_Accurate.inst.cfg rename to resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality_Accurate.inst.cfg diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Visual.inst.cfg new file mode 100644 index 0000000000..4138f62694 --- /dev/null +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +quality_type = normal +intent_category = visual +material = generic_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/um_s5_aa0.4_TPLA_Draft_Print_Quick.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print_Quick.inst.cfg similarity index 96% rename from resources/intent/um_s5_aa0.4_TPLA_Draft_Print_Quick.inst.cfg rename to resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print_Quick.inst.cfg index 458b283dd8..3a6e19c64c 100644 --- a/resources/intent/um_s5_aa0.4_TPLA_Draft_Print_Quick.inst.cfg +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print_Quick.inst.cfg @@ -6,7 +6,7 @@ definition = ultimaker_s5 [metadata] setting_version = 10 type = intent -intent_category = smooth +intent_category = quick quality_type = draft material = generic_tough_pla variant = AA 0.4 diff --git a/resources/intent/um_s5_aa0.4_TPLA_Fast_Print_Accurate.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print_Accurate.inst.cfg similarity index 100% rename from resources/intent/um_s5_aa0.4_TPLA_Fast_Print_Accurate.inst.cfg rename to resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print_Accurate.inst.cfg diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Visual.inst.cfg new file mode 100644 index 0000000000..3f5d3c566e --- /dev/null +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +quality_type = fast +intent_category = visual +material = generic_tough_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_High_Visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_High_Visual.inst.cfg new file mode 100644 index 0000000000..3b5d9fb3db --- /dev/null +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_High_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +quality_type = high +intent_category = visual +material = generic_tough_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/intent/um_s5_aa0.4_TPLA_Normal_Quality_Accurate.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality_Accurate.inst.cfg similarity index 100% rename from resources/intent/um_s5_aa0.4_TPLA_Normal_Quality_Accurate.inst.cfg rename to resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality_Accurate.inst.cfg diff --git a/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Visual.inst.cfg b/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Visual.inst.cfg new file mode 100644 index 0000000000..d71bb76b35 --- /dev/null +++ b/resources/intent/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Visual.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Visual +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +quality_type = normal +intent_category = visual +material = generic_tough_pla +variant = AA 0.4 + +[values] +speed_infill = 50 +wall_thickness = =wall_line_width * 3 +top_bottom_thickness = =wall_thickness diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 828d8854dd..f13f9e0ce9 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -301,6 +301,15 @@ UM.MainWindow } } + // A hint for the loaded content view. Overlay items / controls can safely be placed in this area + Item { + id: mainSafeArea + anchors.left: viewOrientationControls.right + anchors.right: main.right + anchors.top: main.top + anchors.bottom: main.bottom + } + Loader { // A stage can control this area. If nothing is set, it will therefore show the 3D view. @@ -316,6 +325,12 @@ UM.MainWindow } source: UM.Controller.activeStage != null ? UM.Controller.activeStage.mainComponent : "" + + onLoaded: { + if (main.item.safeArea !== undefined){ + main.item.safeArea = Qt.binding(function() { return mainSafeArea }); + } + } } Loader diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index fcfe5749e0..d635b2b721 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -53,7 +53,11 @@ Item } // When loaded, try to select the active material in the tree - Component.onCompleted: resetExpandedActiveMaterial() + Component.onCompleted: + { + resetExpandedActiveMaterial() + base.newRootMaterialIdToSwitchTo = active_root_material_id + } // Every time the selected item has changed, notify to the details panel onCurrentItemChanged: diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml index a180ad6324..22c4039063 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml @@ -19,12 +19,6 @@ Item property bool settingsEnabled: Cura.ExtruderManager.activeExtruderStackId || extrudersEnabledCount.properties.value == 1 property real padding: UM.Theme.getSize("thick_margin").width - UM.I18nCatalog - { - id: catalog - name: "cura" - } - Column { spacing: UM.Theme.getSize("wide_margin").height diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml index 3c7caad470..5e58faec78 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml @@ -124,18 +124,6 @@ Item elide: Text.ElideRight } - NoIntentIcon - { - affected_extruders: Cura.MachineManager.extruderPositionsWithNonActiveIntent - intent_type: model.name - anchors.right: intentCategoryLabel.right - anchors.rightMargin: UM.Theme.getSize("narrow_margin").width - width: intentCategoryLabel.height * 0.75 - anchors.verticalCenter: parent.verticalCenter - height: width - visible: Cura.MachineManager.activeIntentCategory == model.intent_category && affected_extruders.length - } - Cura.RadioCheckbar { anchors @@ -164,8 +152,9 @@ Item isCheckedFunction: checkedFunction } - MouseArea // tooltip hover area + MouseArea // Intent description tooltip hover area { + id: intentDescriptionHoverArea anchors.fill: parent hoverEnabled: true enabled: model.description !== undefined @@ -181,6 +170,20 @@ Item } onExited: base.hideTooltip() } + + NoIntentIcon // This icon has hover priority over intentDescriptionHoverArea, so draw it above it. + { + affected_extruders: Cura.MachineManager.extruderPositionsWithNonActiveIntent + intent_type: model.name + anchors.right: intentCategoryLabel.right + anchors.rightMargin: UM.Theme.getSize("narrow_margin").width + width: intentCategoryLabel.height * 0.75 + anchors.verticalCenter: parent.verticalCenter + height: width + visible: Cura.MachineManager.activeIntentCategory == model.intent_category && affected_extruders.length + } + + } } diff --git a/resources/qml/Settings/SettingExtruder.qml b/resources/qml/Settings/SettingExtruder.qml index 7162744ae5..ff57381ddf 100644 --- a/resources/qml/Settings/SettingExtruder.qml +++ b/resources/qml/Settings/SettingExtruder.qml @@ -75,7 +75,7 @@ SettingItem base.setActiveFocusToNextSetting(false) } - currentIndex: propertyProvider.properties.value + currentIndex: propertyProvider.properties.value !== undefined ? propertyProvider.properties.value : 0 property string color: "#fff" diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index c851b7c042..9986c7eaf8 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -23,17 +23,16 @@ Item property alias contents: controlContainer.children property alias hovered: mouse.containsMouse - property var showRevertButton: true - property var showInheritButton: true - property var showLinkedSettingIcon: true - property var doDepthIndentation: true - property var doQualityUserSettingEmphasis: true + property bool showRevertButton: true + property bool showInheritButton: true + property bool showLinkedSettingIcon: true + property bool doDepthIndentation: true + property bool doQualityUserSettingEmphasis: true property var settingKey: definition.key //Used to detect each individual setting more easily in Squish GUI tests. // Create properties to put property provider stuff in (bindings break in qt 5.5.1 otherwise) property var state: propertyProvider.properties.state - // There is no resolve property if there is only one stack. - property var resolve: Cura.MachineManager.activeStackId !== Cura.MachineManager.activeMachine.id ? propertyProvider.properties.resolve : "None" + property var resolve: propertyProvider.properties.resolve property var stackLevels: propertyProvider.stackLevels property var stackLevel: stackLevels[0] // A list of stack levels that will trigger to show the revert button @@ -57,7 +56,8 @@ Item signal showTooltip(string text) signal hideTooltip() signal showAllHiddenInheritedSettings(string category_id) - property string tooltipText: + + function createTooltipText() { var affects = settingDefinitionsModel.getRequiredBy(definition.key, "value") var affected_by = settingDefinitionsModel.getRequires(definition.key, "value") @@ -128,7 +128,7 @@ Item onTriggered: { - base.showTooltip(base.tooltipText) + base.showTooltip(base.createTooltipText()) } } @@ -149,7 +149,7 @@ Item color: UM.Theme.getColor("setting_control_text") opacity: (definition.visible) ? 1 : 0.5 // emphasize the setting if it has a value in the user or quality profile - font: base.doQualityUserSettingEmphasis && base.stackLevel != undefined && base.stackLevel <= 1 ? UM.Theme.getFont("default_italic") : UM.Theme.getFont("default") + font: base.doQualityUserSettingEmphasis && base.stackLevel !== undefined && base.stackLevel <= 1 ? UM.Theme.getFont("default_italic") : UM.Theme.getFont("default") } Row @@ -170,10 +170,11 @@ Item { id: linkedSettingIcon; - visible: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine && (!definition.settable_per_extruder || String(globalPropertyProvider.properties.limit_to_extruder) != "-1") && base.showLinkedSettingIcon + visible: (!definition.settable_per_extruder || String(globalPropertyProvider.properties.limit_to_extruder) != "-1") && base.showLinkedSettingIcon - height: parent.height; - width: height; + anchors.top: parent.top + anchors.bottom: parent.bottom + width: height color: UM.Theme.getColor("setting_control_button") hoverColor: UM.Theme.getColor("setting_control_button") @@ -184,14 +185,14 @@ Item { hoverTimer.stop() var tooltipText = catalog.i18nc("@label", "This setting is always shared between all extruders. Changing it here will change the value for all extruders.") - if ((resolve != "None") && (stackLevel != 0)) + if ((resolve !== "None") && (stackLevel !== 0)) { // We come here if a setting has a resolve and the setting is not manually edited. tooltipText += " " + catalog.i18nc("@label", "The value is resolved from per-extruder values ") + "[" + Cura.ExtruderManager.getInstanceExtruderValues(definition.key) + "]." } base.showTooltip(tooltipText) } - onExited: base.showTooltip(base.tooltipText) + onExited: base.showTooltip(base.createTooltipText()) } UM.SimpleButton @@ -200,7 +201,8 @@ Item visible: base.resetButtonVisible - height: parent.height + anchors.top: parent.top + anchors.bottom: parent.bottom width: height color: UM.Theme.getColor("setting_control_button") @@ -227,7 +229,7 @@ Item hoverTimer.stop() base.showTooltip(catalog.i18nc("@label", "This setting has a value that is different from the profile.\n\nClick to restore the value of the profile.")) } - onExited: base.showTooltip(base.tooltipText) + onExited: base.showTooltip(base.createTooltipText()) } UM.SimpleButton @@ -275,10 +277,15 @@ Item // Observed when loading workspace, probably when SettingItems are removed. return false } + if(globalPropertyProvider.properties.limit_to_extruder === undefined) + { + return false + } return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, String(globalPropertyProvider.properties.limit_to_extruder)).indexOf(definition.key) >= 0 } - height: parent.height + anchors.top: parent.top + anchors.bottom: parent.bottom width: height onClicked: @@ -296,7 +303,7 @@ Item break } } - if ((last_entry == 4 || last_entry == 11) && base.stackLevel == 0 && base.stackLevels.length == 2) + if ((last_entry === 4 || last_entry === 11) && base.stackLevel === 0 && base.stackLevels.length === 2) { // Special case of the inherit reset. If only the definition (4th or 11th) container) and the first // entry (user container) are set, we can simply remove the container. @@ -320,7 +327,7 @@ Item iconSource: UM.Theme.getIcon("formula") onEntered: { hoverTimer.stop(); base.showTooltip(catalog.i18nc("@label", "This setting is normally calculated, but it currently has an absolute value set.\n\nClick to restore the calculated value.")) } - onExited: base.showTooltip(base.tooltipText) + onExited: base.showTooltip(base.createTooltipText()) } } diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index c2f23a6f1d..5aea939728 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -228,7 +228,7 @@ Item model: UM.SettingDefinitionsModel { id: definitionsModel - containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: "" + containerId: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.definition.id: "" visibilityHandler: UM.SettingPreferenceVisibilityHandler { } exclude: ["machine_settings", "command_line_settings", "infill_mesh", "infill_mesh_order", "cutting_mesh", "support_mesh", "anti_overhang_mesh"] // TODO: infill_mesh settigns are excluded hardcoded, but should be based on the fact that settable_globally, settable_per_meshgroup and settable_per_extruder are false. expanded: CuraApplication.expandedCategories @@ -241,43 +241,41 @@ Item CuraApplication.setExpandedCategories(expanded) } } - onVisibilityChanged: Cura.SettingInheritanceManager.forceUpdate() + onVisibilityChanged: Cura.SettingInheritanceManager.scheduleUpdate() } - property var indexWithFocus: -1 - + property int indexWithFocus: -1 + property string activeMachineId: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.id : "" delegate: Loader { id: delegate width: scrollView.width - height: provider.properties.enabled == "True" ? UM.Theme.getSize("section").height : - contents.spacing + height: provider.properties.enabled === "True" ? UM.Theme.getSize("section").height : - contents.spacing Behavior on height { NumberAnimation { duration: 100 } } - opacity: provider.properties.enabled == "True" ? 1 : 0 + opacity: provider.properties.enabled === "True" ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 100 } } enabled: { if (!Cura.ExtruderManager.activeExtruderStackId && machineExtruderCount.properties.value > 1) { // disable all controls on the global tab, except categories - return model.type == "category" + return model.type === "category" } - return provider.properties.enabled == "True" + return provider.properties.enabled === "True" } property var definition: model property var settingDefinitionsModel: definitionsModel property var propertyProvider: provider property var globalPropertyProvider: inheritStackProvider - property var externalResetHandler: false - - property string activeMachineId: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.id : "" + property bool externalResetHandler: false //Qt5.4.2 and earlier has a bug where this causes a crash: https://bugreports.qt.io/browse/QTBUG-35989 //In addition, while it works for 5.5 and higher, the ordering of the actual combo box drop down changes, //causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely. - asynchronous: model.type != "enum" && model.type != "extruder" && model.type != "optional_extruder" - active: model.type != undefined + asynchronous: model.type !== "enum" && model.type !== "extruder" && model.type !== "optional_extruder" + active: model.type !== undefined source: { @@ -313,7 +311,7 @@ Item { target: provider property: "containerStackId" - when: model.settable_per_extruder || (inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0); + when: model.settable_per_extruder || (inheritStackProvider.properties.limit_to_extruder !== null && inheritStackProvider.properties.limit_to_extruder >= 0); value: { // Associate this binding with Cura.MachineManager.activeMachine.id in the beginning so this @@ -324,9 +322,9 @@ Item if (!model.settable_per_extruder) { //Not settable per extruder or there only is global, so we must pick global. - return delegate.activeMachineId + return contents.activeMachineId } - if (inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0) + if (inheritStackProvider.properties.limit_to_extruder !== null && inheritStackProvider.properties.limit_to_extruder >= 0) { //We have limit_to_extruder, so pick that stack. return Cura.ExtruderManager.extruderIds[String(inheritStackProvider.properties.limit_to_extruder)]; @@ -337,7 +335,7 @@ Item return Cura.ExtruderManager.activeExtruderStackId; } //No extruder tab is selected. Pick the global stack. Shouldn't happen any more since we removed the global tab. - return delegate.activeMachineId + return contents.activeMachineId } } @@ -346,7 +344,7 @@ Item UM.SettingPropertyProvider { id: inheritStackProvider - containerStackId: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.id: "" + containerStackId: contents.activeMachineId key: model.key watchedProperties: [ "limit_to_extruder" ] } @@ -355,11 +353,11 @@ Item { id: provider - containerStackId: delegate.activeMachineId + containerStackId: contents.activeMachineId key: model.key ? model.key : "" watchedProperties: [ "value", "enabled", "state", "validationState", "settable_per_extruder", "resolve" ] storeIndex: 0 - removeUnusedValue: model.resolve == undefined + removeUnusedValue: model.resolve === undefined } Connections @@ -421,8 +419,6 @@ Item } } - UM.I18nCatalog { id: catalog; name: "cura"; } - NumberAnimation { id: animateContentY target: contents @@ -465,7 +461,7 @@ Item //: Settings context menu action text: catalog.i18nc("@action:menu", "Copy value to all extruders") visible: machineExtruderCount.properties.value > 1 - enabled: contextMenu.provider != undefined && contextMenu.provider.properties.settable_per_extruder != "False" + enabled: contextMenu.provider !== undefined && contextMenu.provider.properties.settable_per_extruder !== "False" onTriggered: Cura.MachineManager.copyValueToExtruders(contextMenu.key) } @@ -474,7 +470,7 @@ Item //: Settings context menu action text: catalog.i18nc("@action:menu", "Copy all changed values to all extruders") visible: machineExtruderCount.properties.value > 1 - enabled: contextMenu.provider != undefined + enabled: contextMenu.provider !== undefined onTriggered: Cura.MachineManager.copyAllValuesToExtruders() } diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_A.inst.cfg index 1d02843407..a3260a32f4 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_A.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_A.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = a weight = 1 -material = generic_abs +material = emotiontech_abs variant = Standard 0.4 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.5 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 55 -speed_wall = =math.ceil(speed_print * 40/55) -speed_wall_0 = =math.ceil(speed_wall * 30/40) -speed_topbottom = =math.ceil(speed_print * 35/55) -speed_layer_0 = =math.ceil(speed_print * 20/55) +speed_print = 50 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 35 diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_B.inst.cfg index 0d1ad41dd0..648ec5520c 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_B.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = b weight = 0 -material = generic_abs +material = emotiontech_abs variant = Standard 0.4 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.5 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 60 -speed_wall = =math.ceil(speed_print * 43/60) -speed_wall_0 = =math.ceil(speed_wall * 33/43) -speed_topbottom = =math.ceil(speed_print * 37/60) -speed_layer_0 = =math.ceil(speed_print * 25/60) +speed_print = 55 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 35 diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_C.inst.cfg index c9c14a4744..e3fe5f49fc 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_C.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = c weight = -1 -material = generic_abs +material = emotiontech_abs variant = Standard 0.4 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.5 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 65 -speed_wall = =math.ceil(speed_print * 45/65) -speed_wall_0 = =math.ceil(speed_wall * 35/45) -speed_topbottom = =math.ceil(speed_print * 40/65) -speed_layer_0 = =math.ceil(speed_print * 30/65) +speed_print = 60 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 35 diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_A.inst.cfg index da41d6228a..8482d229ce 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_A.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_A.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = a weight = 1 -material = generic_petg +material = emotiontech_petg variant = Standard 0.4 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 55 -speed_wall = =math.ceil(speed_print * 40/55) -speed_wall_0 = =math.ceil(speed_wall * 25/40) -speed_topbottom = =math.ceil(speed_print * 35/55) -speed_layer_0 = =math.ceil(speed_print * 20/55) +speed_print = 50 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 50 diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_B.inst.cfg index 8a626b526e..fdddcfbdf5 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_B.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = b weight = 0 -material = generic_petg +material = emotiontech_petg variant = Standard 0.4 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 60 -speed_wall = =math.ceil(speed_print * 43/60) -speed_wall_0 = =math.ceil(speed_wall * 27/43) -speed_topbottom = =math.ceil(speed_print * 37/60) -speed_layer_0 = =math.ceil(speed_print * 25/60) +speed_print = 55 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 50 diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_C.inst.cfg index f1589b9ad7..841c23b837 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_C.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = c weight = -1 -material = generic_petg +material = emotiontech_petg variant = Standard 0.4 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 65 -speed_wall = =math.ceil(speed_print * 45/65) -speed_wall_0 = =math.ceil(speed_wall * 30/45) -speed_topbottom = =math.ceil(speed_print * 40/65) -speed_layer_0 = =math.ceil(speed_print * 30/65) +speed_print = 60 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 50 diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_A.inst.cfg index ac7f3a1812..ff541e9c67 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_A.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_A.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = a weight = 1 -material = generic_pla +material = emotiontech_pla variant = Standard 0.4 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.43 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 55 -speed_wall = =math.ceil(speed_print * 40/55) -speed_wall_0 = =math.ceil(speed_wall * 30/40) -speed_topbottom = =math.ceil(speed_print * 35/55) -speed_layer_0 = =math.ceil(speed_print * 20/55) +speed_print = 50 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 100 diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_B.inst.cfg index e432e9adf2..291ea81dc8 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_B.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = b weight = 0 -material = generic_pla +material = emotiontech_pla variant = Standard 0.4 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.43 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 60 -speed_wall = =math.ceil(speed_print * 43/60) -speed_wall_0 = =math.ceil(speed_wall * 33/43) -speed_topbottom = =math.ceil(speed_print * 37/60) -speed_layer_0 = =math.ceil(speed_print * 25/60) +speed_print = 55 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 100 diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_C.inst.cfg index fa1180951f..7afac5304e 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_C.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = c weight = -1 -material = generic_pla +material = emotiontech_pla variant = Standard 0.4 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.43 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 65 -speed_wall = =math.ceil(speed_print * 45/65) -speed_wall_0 = =math.ceil(speed_wall * 35/45) -speed_topbottom = =math.ceil(speed_print * 40/65) -speed_layer_0 = =math.ceil(speed_print * 30/65) +speed_print = 60 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 100 diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_A.inst.cfg index 6c2c24035c..19d8247456 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_A.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_A.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_B.inst.cfg index 16386f7f87..44e5609b3f 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_B.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) @@ -42,7 +41,7 @@ skin_overlap = 15 support_z_distance = =layer_height-layer_height support_bottom_distance = =support_z_distance support_xy_distance = =line_width*3/4 -support_xy_distance_overhang = ==line_width*0.175/line_width +support_xy_distance_overhang = =line_width*0.175/line_width support_offset = 3 support_pattern = grid support_interface_density = 100 diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_C.inst.cfg index 44c7962480..b4cc317f50 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_C.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_A.inst.cfg index 700d677918..eb8bd0a020 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_A.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_A.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_B.inst.cfg index 28caa54cb8..a25f57b3e7 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_B.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_C.inst.cfg index 561e7b5298..6222d946e0 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_C.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_A.inst.cfg index f56b35d65f..774a985511 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_A.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_A.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_B.inst.cfg index d35c02ca91..72429d945b 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_B.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_C.inst.cfg index d9936c4d82..09c540498e 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_C.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.35 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_A.inst.cfg index b5b70275f4..7c31ab6b41 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_A.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_A.inst.cfg @@ -14,9 +14,8 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.38 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 30 speed_wall = =math.ceil(speed_print * 30/30) diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_B.inst.cfg index cc44f06787..67fb9d5dcb 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_B.inst.cfg @@ -14,9 +14,8 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.38 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 35 speed_wall = =math.ceil(speed_print * 35/35) diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_C.inst.cfg index ca4650cf82..fbe0f733cc 100644 --- a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_C.inst.cfg @@ -14,9 +14,8 @@ variant = Standard 0.4 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.38 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 40/40) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_B.inst.cfg index 10930b6375..517a0d9943 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_B.inst.cfg @@ -8,15 +8,14 @@ setting_version = 10 type = quality quality_type = b weight = 1 -material = generic_abs +material = emotiontech_abs variant = Standard 0.6 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.53 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.53 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 50 speed_wall = =math.ceil(speed_print * 37/50) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_C.inst.cfg index bc3bf2df22..0a55c5fef6 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_C.inst.cfg @@ -8,15 +8,14 @@ setting_version = 10 type = quality quality_type = c weight = 0 -material = generic_abs +material = emotiontech_abs variant = Standard 0.6 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.53 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.53 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 55 speed_wall = =math.ceil(speed_print * 40/55) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_D.inst.cfg index b6dcfdcafe..6128889e8c 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_D.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_D.inst.cfg @@ -8,15 +8,14 @@ setting_version = 10 type = quality quality_type = d weight = -1 -material = generic_abs +material = emotiontech_abs variant = Standard 0.6 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.53 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.53 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 60 speed_wall = =math.ceil(speed_print * 43/60) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_B.inst.cfg index 8acc53f3e0..af9b874470 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_B.inst.cfg @@ -13,16 +13,15 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.53 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.53 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 55 -speed_wall = =math.ceil(speed_print * 3/4) -speed_wall_0 = =math.ceil(speed_wall * 2/3) -speed_topbottom = =math.ceil(speed_print * 2/3) -speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_print = 50 +speed_wall = =math.ceil(speed_print * 37/50) +speed_wall_0 = =math.ceil(speed_wall * 30/37) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 40 diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_C.inst.cfg index 0b101ae3c6..1ee8fcd291 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_C.inst.cfg @@ -13,16 +13,15 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.53 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.53 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 60 -speed_wall = =math.ceil(speed_print * 3/4) -speed_wall_0 = =math.ceil(speed_wall * 2/3) -speed_topbottom = =math.ceil(speed_print * 2/3) -speed_layer_0 = =math.ceil(speed_print * 27/60) +speed_print = 55 +speed_wall = =math.ceil(speed_print * 40/55) +speed_wall_0 = =math.ceil(speed_wall * 33/40) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 27/55) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 40 diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_D.inst.cfg index d7eeb0f3b7..9922045d01 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_D.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_D.inst.cfg @@ -13,16 +13,15 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.53 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.53 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 65 -speed_wall = =math.ceil(speed_print * 3/4) -speed_wall_0 = =math.ceil(speed_wall * 3/4) -speed_topbottom = =math.ceil(speed_print * 2/3) -speed_layer_0 = =math.ceil(speed_print * 30/65) +speed_print = 60 +speed_wall = =math.ceil(speed_print * 43/60) +speed_wall_0 = =math.ceil(speed_wall * 35/45) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 40 diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_Nylon-1030_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_Nylon-1030_C.inst.cfg index a2fa319cb5..f8b58f5600 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_Nylon-1030_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_Nylon-1030_C.inst.cfg @@ -14,9 +14,8 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.7 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 55 speed_wall = =math.ceil(speed_print * 40/55) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_B.inst.cfg index e0c5636ea8..a837a8f969 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_B.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = b weight = 1 -material = generic_petg +material = emotiontech_petg variant = Standard 0.6 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.5 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 45 -speed_wall = =math.ceil(speed_print * 3/4) -speed_wall_0 = =math.ceil(speed_wall * 2/3) -speed_topbottom = =math.ceil(speed_print * 2/3) -speed_layer_0 = =math.ceil(speed_print * 0.5) +speed_wall = =math.ceil(speed_print * 33/45) +speed_wall_0 = =math.ceil(speed_wall * 23/33) +speed_topbottom = =math.ceil(speed_print * 30/45) +speed_layer_0 = =math.ceil(speed_print * 23/45) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 70 diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_C.inst.cfg index 171d465248..92cba1ea19 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_C.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = c weight = 0 -material = generic_petg +material = emotiontech_petg variant = Standard 0.6 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.5 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 50 -speed_wall = =math.ceil(speed_print * 3/4) -speed_wall_0 = =math.ceil(speed_wall * 2/3) -speed_topbottom = =math.ceil(speed_print * 2/3) -speed_layer_0 = =math.ceil(speed_print * 0.5) +speed_wall = =math.ceil(speed_print * 37/50) +speed_wall_0 = =math.ceil(speed_wall * 25/37) +speed_topbottom = =math.ceil(speed_print * 33/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 70 diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_D.inst.cfg index 2f2c15569e..a1e04e4789 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_D.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_D.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = d weight = -1 -material = generic_petg +material = emotiontech_petg variant = Standard 0.6 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.5 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 55 -speed_wall = =math.ceil(speed_print * 3/4) -speed_wall_0 = =math.ceil(speed_wall * 2/3) -speed_topbottom = =math.ceil(speed_print * 2/3) -speed_layer_0 = =math.ceil(speed_print * 0.5) +speed_wall = =math.ceil(speed_print * 40/55) +speed_wall_0 = =math.ceil(speed_wall * 27/40) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 27/55) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 70 diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_B.inst.cfg index 8e9b10b48f..e70d84ddd8 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_B.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = b weight = 1 -material = generic_pla +material = emotiontech_pla variant = Standard 0.6 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.47 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.53 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.45 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 55 -speed_wall = =math.ceil(speed_print * 3/4) -speed_wall_0 = =math.ceil(speed_wall * 2/3) -speed_topbottom = =math.ceil(speed_print * 2/3) -speed_layer_0 = =math.ceil(speed_print * 0.5) +speed_print = 50 +speed_wall = =math.ceil(speed_print * 37/50) +speed_wall_0 = =math.ceil(speed_wall * 30/37) +speed_topbottom = =math.ceil(speed_print * 33/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 100 diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_C.inst.cfg index dc3e6e66d6..fe9d215acb 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_C.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = c weight = 0 -material = generic_pla +material = emotiontech_pla variant = Standard 0.6 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.47 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.53 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.45 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 60 -speed_wall = =math.ceil(speed_print * 3/4) -speed_wall_0 = =math.ceil(speed_wall * 2/3) -speed_topbottom = =math.ceil(speed_print * 2/3) -speed_layer_0 = =math.ceil(speed_print * 0.5) +speed_print = 55 +speed_wall = =math.ceil(speed_print * 40/55) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 27/55) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 100 diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_D.inst.cfg index e134bdd738..233ea10e27 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_D.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_D.inst.cfg @@ -8,21 +8,20 @@ setting_version = 10 type = quality quality_type = d weight = -1 -material = generic_pla +material = emotiontech_pla variant = Standard 0.6 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.47 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.53 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.45 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 wall_0_wipe_dist = =machine_nozzle_size/2 -speed_print = 65 -speed_wall = =math.ceil(speed_print * 3/4) -speed_wall_0 = =math.ceil(speed_wall * 2/3) -speed_topbottom = =math.ceil(speed_print * 2/3) -speed_layer_0 = =math.ceil(speed_print * 0.5) +speed_print = 60 +speed_wall = =math.ceil(speed_print * 45/60) +speed_wall_0 = =math.ceil(speed_wall * 33/45) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) speed_slowdown_layers = 2 cool_fan_enabled = True cool_fan_speed = 100 diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_B.inst.cfg index a437374a06..05ae1383eb 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_B.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_C.inst.cfg index 8c0dbc0732..7507968a69 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_C.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_D.inst.cfg index 5438710e18..ea68f30f33 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_D.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_D.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_B.inst.cfg index 8b0bfbebf8..915e0f3b83 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_B.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_C.inst.cfg index 464bd61eb9..b9c260eb2c 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_C.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_D.inst.cfg index 957945929a..7e1237eb55 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_D.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_D.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_B.inst.cfg index 4cfc5e2425..f5fed6dc2e 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_B.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_C.inst.cfg index 998620ca4d..033c0e03bd 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_C.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_D.inst.cfg index 161b4e9e6a..9e457f7d73 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_D.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_D.inst.cfg @@ -13,10 +13,9 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.55 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 wall_0_wipe_dist = =machine_nozzle_size/2 speed_print = 40 speed_wall = =math.ceil(speed_print * 30/40) diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_B.inst.cfg index 6bc87a7ac9..8d152328ad 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_B.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_B.inst.cfg @@ -13,15 +13,14 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.5*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.59 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.49 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.54 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.54 +line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.55 wall_0_wipe_dist = =machine_nozzle_size speed_print = 35 -speed_wall = =math.ceil(speed_print * 4/4) -speed_wall_0 = =math.ceil(speed_wall * 3/4) -speed_topbottom = =math.ceil(speed_print * 2/3) +speed_wall = =math.ceil(speed_print * 35/35) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 25/35) speed_support = =speed_wall_0 speed_layer_0 = =math.ceil(speed_print * 20/35) speed_slowdown_layers = 1 diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_C.inst.cfg index 6714eb73a2..78483d0238 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_C.inst.cfg @@ -13,15 +13,14 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.67*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.59 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.49 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.54 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.54 +line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.55 wall_0_wipe_dist = =machine_nozzle_size speed_print = 40 -speed_wall = =math.ceil(speed_print * 4/4) -speed_wall_0 = =math.ceil(speed_wall * 3/4) -speed_topbottom = =math.ceil(speed_print * 2/3) +speed_wall = =math.ceil(speed_print * 40/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 27/40) speed_support = =speed_wall_0 speed_layer_0 = =math.ceil(speed_print * 20/40) speed_slowdown_layers = 1 diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_D.inst.cfg index d1a90a6b0b..de5110ef46 100644 --- a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_D.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_D.inst.cfg @@ -13,15 +13,14 @@ variant = Standard 0.6 [values] layer_height_0 = =round(0.75*machine_nozzle_size, 2) -line_width = =machine_nozzle_size/machine_nozzle_size*0.59 -wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.49 -infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.54 -support_line_width = =machine_nozzle_size/machine_nozzle_size*0.54 +line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.55 wall_0_wipe_dist = =machine_nozzle_size speed_print = 45 -speed_wall = =math.ceil(speed_print * 4/4) -speed_wall_0 = =math.ceil(speed_wall * 3/4) -speed_topbottom = =math.ceil(speed_print * 2/3) +speed_wall = =math.ceil(speed_print * 45/45) +speed_wall_0 = =math.ceil(speed_wall * 33/45) +speed_topbottom = =math.ceil(speed_print * 30/45) speed_layer_0 = =math.ceil(speed_print * 20/45) speed_slowdown_layers = 1 cool_fan_enabled = True diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_C.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_C.inst.cfg index 52c31ac93a..bf649d61ef 100644 --- a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_C.inst.cfg @@ -8,7 +8,7 @@ setting_version = 10 type = quality quality_type = c weight = 1 -material = generic_abs +material = emotiontech_abs variant = Standard 0.8 [values] diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_D.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_D.inst.cfg index c6139eedca..55d6d20323 100644 --- a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_D.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_D.inst.cfg @@ -8,7 +8,7 @@ setting_version = 10 type = quality quality_type = d weight = 0 -material = generic_abs +material = emotiontech_abs variant = Standard 0.8 [values] diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_E.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_E.inst.cfg index c4515d2434..8c3215ebc1 100644 --- a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_E.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_E.inst.cfg @@ -8,7 +8,7 @@ setting_version = 10 type = quality quality_type = e weight = -1 -material = generic_abs +material = emotiontech_abs variant = Standard 0.8 [values] diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_C.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_C.inst.cfg index 7a0ae89493..4a12fffb1e 100644 --- a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_C.inst.cfg @@ -8,7 +8,7 @@ setting_version = 10 type = quality quality_type = c weight = 1 -material = generic_petg +material = emotiontech_petg variant = Standard 0.8 [values] diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_D.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_D.inst.cfg index 9e310406e4..a5f01107f8 100644 --- a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_D.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_D.inst.cfg @@ -8,7 +8,7 @@ setting_version = 10 type = quality quality_type = d weight = 0 -material = generic_petg +material = emotiontech_petg variant = Standard 0.8 [values] diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_E.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_E.inst.cfg index 8fef028e8f..6042de9501 100644 --- a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_E.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_E.inst.cfg @@ -8,7 +8,7 @@ setting_version = 10 type = quality quality_type = e weight = -1 -material = generic_petg +material = emotiontech_petg variant = Standard 0.8 [values] diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_C.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_C.inst.cfg index bcabed9fb6..405bc3db13 100644 --- a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_C.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_C.inst.cfg @@ -8,7 +8,7 @@ setting_version = 10 type = quality quality_type = c weight = 1 -material = generic_pla +material = emotiontech_pla variant = Standard 0.8 [values] diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_D.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_D.inst.cfg index 9bc4ebae63..b52bd3e5a1 100644 --- a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_D.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_D.inst.cfg @@ -8,7 +8,7 @@ setting_version = 10 type = quality quality_type = d weight = 0 -material = generic_pla +material = emotiontech_pla variant = Standard 0.8 [values] diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_E.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_E.inst.cfg index fea9542fed..8b65fa78bd 100644 --- a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_E.inst.cfg +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_E.inst.cfg @@ -8,7 +8,7 @@ setting_version = 10 type = quality quality_type = e weight = -1 -material = generic_pla +material = emotiontech_pla variant = Standard 0.8 [values] diff --git a/resources/quality/strateo3d/Standard_1.2/s3d_std1.2_PLA_H.inst.cfg b/resources/quality/strateo3d/Standard_1.2/s3d_std1.2_PLA_H.inst.cfg index 29779c9b9f..7f29e29d88 100644 --- a/resources/quality/strateo3d/Standard_1.2/s3d_std1.2_PLA_H.inst.cfg +++ b/resources/quality/strateo3d/Standard_1.2/s3d_std1.2_PLA_H.inst.cfg @@ -8,7 +8,7 @@ setting_version = 10 type = quality quality_type = h weight = -1 -material = generic_pla +material = emotiontech_pla variant = Standard 1.2 [values] diff --git a/resources/themes/cura-light/images/logo.svg b/resources/themes/cura-light/images/logo.svg index 814b157e2a..611840e248 100644 --- a/resources/themes/cura-light/images/logo.svg +++ b/resources/themes/cura-light/images/logo.svg @@ -1,37 +1,18 @@ - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 0d9f624805..055f176b33 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -483,7 +483,7 @@ "default_lining": [0.08, 0.08], "default_arrow": [0.8, 0.8], - "logo": [8, 1.75], + "logo": [16, 3.5], "wide_margin": [2.0, 2.0], "thick_margin": [1.71, 1.43], diff --git a/tests/Machines/TestVariantNode.py b/tests/Machines/TestVariantNode.py index bc860058a1..8ccde9bc74 100644 --- a/tests/Machines/TestVariantNode.py +++ b/tests/Machines/TestVariantNode.py @@ -137,38 +137,17 @@ def test_materialAdded_update(container_registry, machine_node, metadata, change def test_preferredMaterialExactMatch(empty_variant_node): empty_variant_node.materials = { "some_different_material": MagicMock(getMetaDataEntry = lambda x: 3), - "preferred_material_base_file": MagicMock(getMetaDataEntry = lambda x: 3) # Exact match. + "preferred_material": MagicMock(getMetaDataEntry = lambda x: 3) # Exact match. } - assert empty_variant_node.preferredMaterial(approximate_diameter = 3) == empty_variant_node.materials["preferred_material_base_file"], "It should match exactly on this one since it's the preferred material." - -## Tests the preferred material when a submaterial is available in the -# materials list for this node. -def test_preferredMaterialSubmaterial(empty_variant_node): - empty_variant_node.materials = { - "some_different_material": MagicMock(getMetaDataEntry = lambda x: 3), - "preferred_material_base_file_aa04": MagicMock(getMetaDataEntry = lambda x: 3) # This is a submaterial of the preferred material. - } - - assert empty_variant_node.preferredMaterial(approximate_diameter = 3) == empty_variant_node.materials["preferred_material_base_file_aa04"], "It should match on the submaterial just as well." - -## Tests the preferred material matching on the approximate diameter of the -# filament. -def test_preferredMaterialDiameter(empty_variant_node): - empty_variant_node.materials = { - "some_different_material": MagicMock(getMetaDataEntry = lambda x: 3), - "preferred_material_wrong_diameter": MagicMock(getMetaDataEntry = lambda x: 2), # Approximate diameter is 2 instead of 3. - "preferred_material_correct_diameter": MagicMock(getMetaDataEntry = lambda x: 3) # Correct approximate diameter. - } - - assert empty_variant_node.preferredMaterial(approximate_diameter = 3) == empty_variant_node.materials["preferred_material_correct_diameter"], "It should match only on the material with correct diameter." + assert empty_variant_node.preferredMaterial(approximate_diameter = 3) == empty_variant_node.materials["preferred_material"], "It should match exactly on this one since it's the preferred material." ## Tests the preferred material matching on a different material if the # diameter is wrong. def test_preferredMaterialDiameterNoMatch(empty_variant_node): empty_variant_node.materials = collections.OrderedDict() empty_variant_node.materials["some_different_material"] = MagicMock(getMetaDataEntry = lambda x: 3) # This one first so that it gets iterated over first. - empty_variant_node.materials["preferred_material_wrong_diameter"] = MagicMock(getMetaDataEntry = lambda x: 2) + empty_variant_node.materials["preferred_material"] = MagicMock(getMetaDataEntry = lambda x: 2) # Wrong diameter. assert empty_variant_node.preferredMaterial(approximate_diameter = 3) == empty_variant_node.materials["some_different_material"], "It should match on another material with the correct diameter if the preferred one is unavailable." @@ -177,7 +156,7 @@ def test_preferredMaterialDiameterNoMatch(empty_variant_node): def test_preferredMaterialDiameterPreference(empty_variant_node): empty_variant_node.materials = collections.OrderedDict() empty_variant_node.materials["some_different_material"] = MagicMock(getMetaDataEntry = lambda x: 2) # This one first so that it gets iterated over first. - empty_variant_node.materials["preferred_material_wrong_diameter"] = MagicMock(getMetaDataEntry = lambda x: 2) # Matches on ID but not diameter. + empty_variant_node.materials["preferred_material"] = MagicMock(getMetaDataEntry = lambda x: 2) # Matches on ID but not diameter. empty_variant_node.materials["not_preferred_but_correct_diameter"] = MagicMock(getMetaDataEntry = lambda x: 3) # Matches diameter but not ID. assert empty_variant_node.preferredMaterial(approximate_diameter = 3) == empty_variant_node.materials["not_preferred_but_correct_diameter"], "It should match on the correct diameter even if it's not the preferred one." \ No newline at end of file diff --git a/tests/Settings/TestDefinitionContainer.py b/tests/Settings/TestDefinitionContainer.py index 6e502280cd..4487388b86 100644 --- a/tests/Settings/TestDefinitionContainer.py +++ b/tests/Settings/TestDefinitionContainer.py @@ -17,6 +17,10 @@ Resources.addSearchPath(os.path.abspath(os.path.join(os.path.dirname(__file__), machine_filepaths = sorted(os.listdir(os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions"))) +machine_filepaths = [os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions", filename) for filename in machine_filepaths] +extruder_filepaths = sorted(os.listdir(os.path.join(os.path.dirname(__file__), "..", "..", "resources", "extruders"))) +extruder_filepaths = [os.path.join(os.path.dirname(__file__), "..", "..", "resources", "extruders", filename) for filename in extruder_filepaths] +definition_filepaths = machine_filepaths + extruder_filepaths all_meshes = os.listdir(os.path.join(os.path.dirname(__file__), "..", "..", "resources", "meshes")) all_images = os.listdir(os.path.join(os.path.dirname(__file__), "..", "..", "resources", "images")) @@ -29,17 +33,16 @@ def definition_container(): ## Tests all definition containers -@pytest.mark.parametrize("file_name", machine_filepaths) -def test_validateMachineDefinitionContainer(file_name, definition_container): +@pytest.mark.parametrize("file_path", machine_filepaths) +def test_validateMachineDefinitionContainer(file_path, definition_container): + file_name = os.path.basename(file_path) if file_name == "fdmprinter.def.json" or file_name == "fdmextruder.def.json": return # Stop checking, these are root files. - definition_path = os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions") - assertIsDefinitionValid(definition_container, definition_path, file_name) + assertIsDefinitionValid(definition_container, file_path) - -def assertIsDefinitionValid(definition_container, path, file_name): - with open(os.path.join(path, file_name), encoding = "utf-8") as data: +def assertIsDefinitionValid(definition_container, file_path): + with open(file_path, encoding = "utf-8") as data: json = data.read() parser, is_valid = definition_container.readAndValidateSerialized(json) assert is_valid #The definition has invalid JSON structure. @@ -57,10 +60,9 @@ def assertIsDefinitionValid(definition_container, path, file_name): # When a definition container defines a "default_value" but inherits from a # definition that defines a "value", the "default_value" is ineffective. This # test fails on those things. -@pytest.mark.parametrize("file_name", machine_filepaths) -def test_validateOverridingDefaultValue(file_name: str): - definition_path = os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions", file_name) - with open(definition_path, encoding = "utf-8") as f: +@pytest.mark.parametrize("file_path", definition_filepaths) +def test_validateOverridingDefaultValue(file_path: str): + with open(file_path, encoding = "utf-8") as f: doc = json.load(f) if "inherits" not in doc: @@ -69,8 +71,8 @@ def test_validateOverridingDefaultValue(file_name: str): return # No settings are being overridden. No need to check anything. parent_settings = getInheritedSettings(doc["inherits"]) for key, val in doc["overrides"].items(): - if "value" in parent_settings[key]: - assert "default_value" not in val, "Unnecessary default_value for {key} in {file_name}".format(key = key, file_name = file_name) # If there is a value in the parent settings, then the default_value is not effective. + if key in parent_settings and "value" in parent_settings[key]: + assert "default_value" not in val, "Unnecessary default_value for {key} in {file_name}".format(key = key, file_name = file_path) # If there is a value in the parent settings, then the default_value is not effective. ## Get all settings and their properties from a definition we're inheriting # from. @@ -130,10 +132,46 @@ def merge_dicts(base: Dict[str, Any], overrides: Dict[str, Any]) -> Dict[str, An # # ID fields are legacy. They should not be used any more. This is legacy that # people don't seem to be able to get used to. -@pytest.mark.parametrize("file_name", machine_filepaths) -def test_noId(file_name): - definition_path = os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions", file_name) - with open(definition_path, encoding = "utf-8") as f: +@pytest.mark.parametrize("file_path", definition_filepaths) +def test_noId(file_path: str): + with open(file_path, encoding = "utf-8") as f: doc = json.load(f) - assert "id" not in doc, "Definitions should not have an ID field." \ No newline at end of file + assert "id" not in doc, "Definitions should not have an ID field." + +## Verifies that extruders say that they work on the same extruder_nr as what +# is listed in their machine definition. +@pytest.mark.parametrize("file_path", extruder_filepaths) +def test_extruderMatch(file_path: str): + extruder_id = os.path.basename(file_path).split(".")[0] + with open(file_path, encoding = "utf-8") as f: + doc = json.load(f) + + if "metadata" not in doc: + return # May not be desirable either, but it's probably unfinished then. + if "machine" not in doc["metadata"] or "position" not in doc["metadata"]: + return # FDMextruder doesn't have this since it's not linked to a particular printer. + machine = doc["metadata"]["machine"] + position = doc["metadata"]["position"] + + # Find the machine definition. + for machine_filepath in machine_filepaths: + machine_id = os.path.basename(machine_filepath).split(".")[0] + if machine_id == machine: + break + else: + assert False, "The machine ID {machine} is not found.".format(machine = machine) + with open(machine_filepath, encoding = "utf-8") as f: + machine_doc = json.load(f) + + # Make sure that the two match up. + assert "metadata" in machine_doc, "Machine definition missing metadata entry." + assert "machine_extruder_trains" in machine_doc["metadata"], "Machine must define extruder trains." + extruder_trains = machine_doc["metadata"]["machine_extruder_trains"] + assert position in extruder_trains, "There must be a reference to the extruder in the machine definition." + assert extruder_trains[position] == extruder_id, "The extruder referenced in the machine definition must match up." + + # Also test if the extruder_nr setting is properly overridden. + if "overrides" not in doc or "extruder_nr" not in doc["overrides"] or "default_value" not in doc["overrides"]["extruder_nr"]: + assert position == "0" # Default to 0 is allowed. + assert doc["overrides"]["extruder_nr"]["default_value"] == int(position) \ No newline at end of file