diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 2f880a9e32..6934354a70 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -1,33 +1,49 @@
+---
+name: Bug report
+about: Create a report to help us fix issues.
+title: ''
+labels: 'Type: Bug'
+assignees: ''
+
+---
+
-**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 and maybe GPU.)
**Printer**
-
+(Which printer was selected in Cura?)
-**Steps to Reproduce**
-
+**Reproduction steps**
+1. (Something you did.)
+2. (Something you did next.)
-**Actual Results**
-
+**Screenshot(s)**
+(Image showing the problem, perhaps before/after images.)
+
+**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**
-
+**Project file**
+(For slicing bugs, provide a project which clearly shows the bug, by going to File->Save. For big files you may need to use WeTransfer or similar file sharing sites.)
+
+**Log file**
+(See https://github.com/Ultimaker/Cura#logging-issues to find the log file to upload, or copy a relevant snippet from it.)
+
+**Additional information**
+(Extra information relevant to the issue.)
diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md
index a7371e02a6..6934354a70 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.md
+++ b/.github/ISSUE_TEMPLATE/bug-report.md
@@ -14,30 +14,36 @@ Before filing, PLEASE check if the issue already exists (either open or closed)
Also, please note the application version in the title of the issue. For example: "[3.2.1] Cannot connect to 3rd-party printer". Please do NOT write things like "Request:" or "[BUG]" in the title; this is what labels are for.
-It is also helpful to attach a project (.3mf or .curaproject) file and Cura log file so we can debug issues quicker. Information about how to find the log file can be found at https://github.com/Ultimaker/Cura#logging-issues
-
-To upload a project, try changing the extension to e.g. .curaproject.3mf.zip so that GitHub accepts uploading the file. Otherwise, we recommend http://wetransfer.com, but other file hosts like Google Drive or Dropbox work well too.
-
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 and maybe GPU.)
**Printer**
-
+(Which printer was selected in Cura?)
**Reproduction steps**
-
+1. (Something you did.)
+2. (Something you did next.)
+
+**Screenshot(s)**
+(Image showing the problem, perhaps before/after images.)
**Actual results**
-
+(What happens after the above steps have been followed.)
**Expected results**
-
+(What should happen after the above steps have been followed.)
+
+**Project file**
+(For slicing bugs, provide a project which clearly shows the bug, by going to File->Save. For big files you may need to use WeTransfer or similar file sharing sites.)
+
+**Log file**
+(See https://github.com/Ultimaker/Cura#logging-issues to find the log file to upload, or copy a relevant snippet from it.)
**Additional information**
-
+(Extra information relevant to the issue.)
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/.github/workflows/cicd.yml b/.github/workflows/cicd.yml
new file mode 100644
index 0000000000..3a0b57d714
--- /dev/null
+++ b/.github/workflows/cicd.yml
@@ -0,0 +1,13 @@
+---
+name: CI/CD
+on: [push, pull_request]
+jobs:
+ build:
+ name: Build and test
+ runs-on: ubuntu-latest
+ container: ultimaker/cura-build-environment
+ steps:
+ - name: Checkout master
+ uses: actions/checkout@v1.2.0
+ - name: Build and test
+ run: docker/build.sh
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/ApplicationMetadata.py b/cura/ApplicationMetadata.py
index 655df59c56..427cc77e65 100644
--- a/cura/ApplicationMetadata.py
+++ b/cura/ApplicationMetadata.py
@@ -9,7 +9,11 @@ DEFAULT_CURA_DISPLAY_NAME = "Ultimaker Cura"
DEFAULT_CURA_VERSION = "master"
DEFAULT_CURA_BUILD_TYPE = ""
DEFAULT_CURA_DEBUG_MODE = False
-DEFAULT_CURA_SDK_VERSION = "6.3.0"
+
+# Each release has a fixed SDK version coupled with it. It doesn't make sense to make it configurable because, for
+# example Cura 3.2 with SDK version 6.1 will not work. So the SDK version is hard-coded here and left out of the
+# CuraVersion.py.in template.
+CuraSDKVersion = "7.0.0"
try:
from cura.CuraVersion import CuraAppName # type: ignore
@@ -32,6 +36,9 @@ try:
except ImportError:
CuraVersion = DEFAULT_CURA_VERSION # [CodeStyle: Reflecting imported value]
+# CURA-6569
+# This string indicates what type of version it is. For example, "enterprise". By default it's empty which indicates
+# a default/normal Cura build.
try:
from cura.CuraVersion import CuraBuildType # type: ignore
except ImportError:
@@ -42,7 +49,7 @@ try:
except ImportError:
CuraDebugMode = DEFAULT_CURA_DEBUG_MODE
-# Each release has a fixed SDK version coupled with it. It doesn't make sense to make it configurable because, for
-# example Cura 3.2 with SDK version 6.1 will not work. So the SDK version is hard-coded here and left out of the
-# CuraVersion.py.in template.
-CuraSDKVersion = "6.3.0"
+# CURA-6569
+# Various convenience flags indicating what kind of Cura build it is.
+__ENTERPRISE_VERSION_TYPE = "enterprise"
+IsEnterpriseVersion = CuraBuildType.lower() == __ENTERPRISE_VERSION_TYPE
diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py
index a640760471..aba94e8c60 100755
--- a/cura/BuildVolume.py
+++ b/cura/BuildVolume.py
@@ -26,7 +26,6 @@ catalog = i18nCatalog("cura")
import numpy
import math
-import copy
from typing import List, Optional, TYPE_CHECKING, Any, Set, cast, Iterable, Dict
@@ -126,10 +125,6 @@ class BuildVolume(SceneNode):
# Therefore this works.
self._machine_manager.activeQualityChanged.connect(self._onStackChanged)
- # This should also ways work, and it is semantically more correct,
- # but it does not update the disallowed areas after material change
- self._machine_manager.activeStackChanged.connect(self._onStackChanged)
-
# Enable and disable extruder
self._machine_manager.extruderChanged.connect(self.updateNodeBoundaryCheck)
@@ -1107,7 +1102,7 @@ class BuildVolume(SceneNode):
# If we are printing one at a time, we need to add the bed adhesion size to the disallowed areas of the objects
if container_stack.getProperty("print_sequence", "value") == "one_at_a_time":
- return 0.1 # Return a very small value, so we do draw disallowed area's near the edges.
+ return 0.1
bed_adhesion_size = self._calculateBedAdhesionSize(used_extruders)
support_expansion = self._calculateSupportExpansion(self._global_container_stack)
diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py
index 1d85a1da54..1ec00787d7 100644
--- a/cura/CrashHandler.py
+++ b/cura/CrashHandler.py
@@ -25,6 +25,8 @@ from UM.View.GL.OpenGL import OpenGL
from UM.i18n import i18nCatalog
from UM.Resources import Resources
+from cura import ApplicationMetadata
+
catalog = i18nCatalog("cura")
MYPY = False
@@ -181,6 +183,7 @@ class CrashHandler:
self.cura_version = catalog.i18nc("@label unknown version of Cura", "Unknown")
crash_info = "" + catalog.i18nc("@label Cura version number", "Cura version") + ": " + str(self.cura_version) + "
"
+ crash_info += "" + catalog.i18nc("@label Cura build type", "Cura build type") + ": " + str(ApplicationMetadata.CuraBuildType) + "
"
crash_info += "" + catalog.i18nc("@label Type of platform", "Platform") + ": " + str(platform.platform()) + "
"
crash_info += "" + catalog.i18nc("@label", "Qt version") + ": " + str(QT_VERSION_STR) + "
"
crash_info += "" + catalog.i18nc("@label", "PyQt version") + ": " + str(PYQT_VERSION_STR) + "
"
@@ -191,6 +194,7 @@ class CrashHandler:
group.setLayout(layout)
self.data["cura_version"] = self.cura_version
+ self.data["cura_build_type"] = ApplicationMetadata.CuraBuildType
self.data["os"] = {"type": platform.system(), "version": platform.version()}
self.data["qt_version"] = QT_VERSION_STR
self.data["pyqt_version"] = PYQT_VERSION_STR
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index 1fd62994fd..ef5f987b85 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -15,7 +15,7 @@ from PyQt5.QtQml import qmlRegisterUncreatableType, qmlRegisterSingletonType, qm
from UM.i18n import i18nCatalog
from UM.Application import Application
-from UM.Decorators import override
+from UM.Decorators import override, deprecated
from UM.FlameProfiler import pyqtSlot
from UM.Logger import Logger
from UM.Message import Message
@@ -23,7 +23,6 @@ from UM.Platform import Platform
from UM.PluginError import PluginNotFoundError
from UM.Resources import Resources
from UM.Preferences import Preferences
-from UM.Qt.Bindings import MainWindow
from UM.Qt.QtApplication import QtApplication # The class we're inheriting from.
import UM.Util
from UM.View.SelectionPass import SelectionPass # For typing.
@@ -47,7 +46,6 @@ from UM.Scene.Selection import Selection
from UM.Scene.ToolHandle import ToolHandle
from UM.Settings.ContainerRegistry import ContainerRegistry
-from UM.Settings.ContainerStack import ContainerStack
from UM.Settings.InstanceContainer import InstanceContainer
from UM.Settings.SettingDefinition import SettingDefinition, DefinitionPropertyType
from UM.Settings.SettingFunction import SettingFunction
@@ -73,8 +71,8 @@ from cura.Scene.GCodeListDecorator import GCodeListDecorator
from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator
from cura.Scene import ZOffsetDecorator
+from cura.Machines.ContainerTree import ContainerTree
from cura.Machines.MachineErrorChecker import MachineErrorChecker
-from cura.Machines.VariantManager import VariantManager
from cura.Machines.Models.BuildPlateModel import BuildPlateModel
from cura.Machines.Models.CustomQualityProfilesDropDownMenuModel import CustomQualityProfilesDropDownMenuModel
@@ -85,6 +83,7 @@ from cura.Machines.Models.FirstStartMachineActionsModel import FirstStartMachine
from cura.Machines.Models.GenericMaterialsModel import GenericMaterialsModel
from cura.Machines.Models.GlobalStacksModel import GlobalStacksModel
from cura.Machines.Models.MaterialBrandsModel import MaterialBrandsModel
+from cura.Machines.Models.MaterialManagementModel import MaterialManagementModel
from cura.Machines.Models.MultiBuildPlateModel import MultiBuildPlateModel
from cura.Machines.Models.NozzleModel import NozzleModel
from cura.Machines.Models.QualityManagementModel import QualityManagementModel
@@ -92,6 +91,8 @@ from cura.Machines.Models.QualityProfilesDropDownMenuModel import QualityProfile
from cura.Machines.Models.QualitySettingsModel import QualitySettingsModel
from cura.Machines.Models.SettingVisibilityPresetsModel import SettingVisibilityPresetsModel
from cura.Machines.Models.UserChangesModel import UserChangesModel
+from cura.Machines.Models.IntentModel import IntentModel
+from cura.Machines.Models.IntentCategoryModel import IntentCategoryModel
from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice
from cura.PrinterOutput.NetworkMJPGImage import NetworkMJPGImage
@@ -101,8 +102,10 @@ from cura.Settings.ContainerManager import ContainerManager
from cura.Settings.CuraContainerRegistry import CuraContainerRegistry
from cura.Settings.CuraFormulaFunctions import CuraFormulaFunctions
from cura.Settings.ExtruderManager import ExtruderManager
+from cura.Settings.ExtruderStack import ExtruderStack
from cura.Settings.MachineManager import MachineManager
from cura.Settings.MachineNameValidator import MachineNameValidator
+from cura.Settings.IntentManager import IntentManager
from cura.Settings.MaterialSettingsVisibilityHandler import MaterialSettingsVisibilityHandler
from cura.Settings.SettingInheritanceManager import SettingInheritanceManager
from cura.Settings.SidebarCustomMenuItemsModel import SidebarCustomMenuItemsModel
@@ -130,13 +133,10 @@ from . import CuraActions
from . import PrintJobPreviewImageProvider
from cura import ApplicationMetadata, UltimakerCloudAuthentication
+from cura.Settings.GlobalStack import GlobalStack
if TYPE_CHECKING:
- from cura.Machines.MaterialManager import MaterialManager
- from cura.Machines.QualityManager import QualityManager
from UM.Settings.EmptyInstanceContainer import EmptyInstanceContainer
- from cura.Settings.GlobalStack import GlobalStack
-
numpy.seterr(all = "ignore")
@@ -145,7 +145,7 @@ class CuraApplication(QtApplication):
# SettingVersion represents the set of settings available in the machine/extruder definitions.
# You need to make sure that this version number needs to be increased if there is any non-backwards-compatible
# changes of the settings.
- SettingVersion = 10
+ SettingVersion = 11
Created = False
@@ -161,6 +161,7 @@ class CuraApplication(QtApplication):
ExtruderStack = Resources.UserType + 9
DefinitionChangesContainer = Resources.UserType + 10
SettingVisibilityPreset = Resources.UserType + 11
+ IntentInstanceContainer = Resources.UserType + 12
Q_ENUMS(ResourceTypes)
@@ -197,13 +198,12 @@ class CuraApplication(QtApplication):
self.empty_container = None # type: EmptyInstanceContainer
self.empty_definition_changes_container = None # type: EmptyInstanceContainer
self.empty_variant_container = None # type: EmptyInstanceContainer
+ self.empty_intent_container = None # type: EmptyInstanceContainer
self.empty_material_container = None # type: EmptyInstanceContainer
self.empty_quality_container = None # type: EmptyInstanceContainer
self.empty_quality_changes_container = None # type: EmptyInstanceContainer
- self._variant_manager = None
self._material_manager = None
- self._quality_manager = None
self._machine_manager = None
self._extruder_manager = None
self._container_manager = None
@@ -220,9 +220,11 @@ class CuraApplication(QtApplication):
self._machine_error_checker = None
self._machine_settings_manager = MachineSettingsManager(self, parent = self)
+ self._material_management_model = None
+ 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)
@@ -346,7 +348,7 @@ class CuraApplication(QtApplication):
# Adds expected directory names and search paths for Resources.
def __addExpectedResourceDirsAndSearchPaths(self):
# this list of dir names will be used by UM to detect an old cura directory
- for dir_name in ["extruders", "machine_instances", "materials", "plugins", "quality", "quality_changes", "user", "variants"]:
+ for dir_name in ["extruders", "machine_instances", "materials", "plugins", "quality", "quality_changes", "user", "variants", "intent"]:
Resources.addExpectedDirNameInData(dir_name)
Resources.addSearchPath(os.path.join(self._app_install_dir, "share", "cura", "resources"))
@@ -404,6 +406,7 @@ class CuraApplication(QtApplication):
Resources.addStorageType(self.ResourceTypes.MachineStack, "machine_instances")
Resources.addStorageType(self.ResourceTypes.DefinitionChangesContainer, "definition_changes")
Resources.addStorageType(self.ResourceTypes.SettingVisibilityPreset, "setting_visibility")
+ Resources.addStorageType(self.ResourceTypes.IntentInstanceContainer, "intent")
self._container_registry.addResourceType(self.ResourceTypes.QualityInstanceContainer, "quality")
self._container_registry.addResourceType(self.ResourceTypes.QualityChangesInstanceContainer, "quality_changes")
@@ -413,6 +416,7 @@ class CuraApplication(QtApplication):
self._container_registry.addResourceType(self.ResourceTypes.ExtruderStack, "extruder_train")
self._container_registry.addResourceType(self.ResourceTypes.MachineStack, "machine")
self._container_registry.addResourceType(self.ResourceTypes.DefinitionChangesContainer, "definition_changes")
+ self._container_registry.addResourceType(self.ResourceTypes.IntentInstanceContainer, "intent")
Resources.addType(self.ResourceTypes.QmlFiles, "qml")
Resources.addType(self.ResourceTypes.Firmware, "firmware")
@@ -431,6 +435,9 @@ class CuraApplication(QtApplication):
self._container_registry.addContainer(cura.Settings.cura_empty_instance_containers.empty_variant_container)
self.empty_variant_container = cura.Settings.cura_empty_instance_containers.empty_variant_container
+ self._container_registry.addContainer(cura.Settings.cura_empty_instance_containers.empty_intent_container)
+ self.empty_intent_container = cura.Settings.cura_empty_instance_containers.empty_intent_container
+
self._container_registry.addContainer(cura.Settings.cura_empty_instance_containers.empty_material_container)
self.empty_material_container = cura.Settings.cura_empty_instance_containers.empty_material_container
@@ -445,14 +452,15 @@ class CuraApplication(QtApplication):
def __setLatestResouceVersionsForVersionUpgrade(self):
self._version_upgrade_manager.setCurrentVersions(
{
- ("quality", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.QualityInstanceContainer, "application/x-uranium-instancecontainer"),
- ("quality_changes", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.QualityChangesInstanceContainer, "application/x-uranium-instancecontainer"),
- ("machine_stack", ContainerStack.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.MachineStack, "application/x-cura-globalstack"),
- ("extruder_train", ContainerStack.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.ExtruderStack, "application/x-cura-extruderstack"),
- ("preferences", Preferences.Version * 1000000 + self.SettingVersion): (Resources.Preferences, "application/x-uranium-preferences"),
- ("user", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.UserInstanceContainer, "application/x-uranium-instancecontainer"),
- ("definition_changes", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.DefinitionChangesContainer, "application/x-uranium-instancecontainer"),
- ("variant", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.VariantInstanceContainer, "application/x-uranium-instancecontainer"),
+ ("quality", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.QualityInstanceContainer, "application/x-uranium-instancecontainer"),
+ ("quality_changes", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.QualityChangesInstanceContainer, "application/x-uranium-instancecontainer"),
+ ("intent", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.IntentInstanceContainer, "application/x-uranium-instancecontainer"),
+ ("machine_stack", GlobalStack.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.MachineStack, "application/x-cura-globalstack"),
+ ("extruder_train", ExtruderStack.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.ExtruderStack, "application/x-cura-extruderstack"),
+ ("preferences", Preferences.Version * 1000000 + self.SettingVersion): (Resources.Preferences, "application/x-uranium-preferences"),
+ ("user", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.UserInstanceContainer, "application/x-uranium-instancecontainer"),
+ ("definition_changes", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.DefinitionChangesContainer, "application/x-uranium-instancecontainer"),
+ ("variant", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.VariantInstanceContainer, "application/x-uranium-instancecontainer"),
}
)
@@ -504,10 +512,13 @@ class CuraApplication(QtApplication):
self.showSplashMessage(self._i18n_catalog.i18nc("@info:progress", "Loading machines..."))
+ self._container_registry.allMetadataLoaded.connect(ContainerRegistry.getInstance)
+
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.
@@ -709,6 +720,8 @@ class CuraApplication(QtApplication):
## Handle loading of all plugin types (and the backend explicitly)
# \sa PluginRegistry
def _loadPlugins(self) -> None:
+ self._plugin_registry.setCheckIfTrusted(ApplicationMetadata.IsEnterpriseVersion)
+
self._plugin_registry.addType("profile_reader", self._addProfileReader)
self._plugin_registry.addType("profile_writer", self._addProfileWriter)
@@ -732,21 +745,6 @@ class CuraApplication(QtApplication):
def run(self):
super().run()
- container_registry = self._container_registry
-
- Logger.log("i", "Initializing variant manager")
- self._variant_manager = VariantManager(container_registry)
- self._variant_manager.initialize()
-
- Logger.log("i", "Initializing material manager")
- from cura.Machines.MaterialManager import MaterialManager
- self._material_manager = MaterialManager(container_registry, parent = self)
- self._material_manager.initialize()
-
- Logger.log("i", "Initializing quality manager")
- from cura.Machines.QualityManager import QualityManager
- self._quality_manager = QualityManager(self, parent = self)
- self._quality_manager.initialize()
Logger.log("i", "Initializing machine manager")
self._machine_manager = MachineManager(self, parent = self)
@@ -882,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)
@@ -926,16 +928,8 @@ class CuraApplication(QtApplication):
self._extruder_manager = ExtruderManager()
return self._extruder_manager
- def getVariantManager(self, *args) -> VariantManager:
- return self._variant_manager
-
- @pyqtSlot(result = QObject)
- def getMaterialManager(self, *args) -> "MaterialManager":
- return self._material_manager
-
- @pyqtSlot(result = QObject)
- def getQualityManager(self, *args) -> "QualityManager":
- return self._quality_manager
+ def getIntentManager(self, *args) -> IntentManager:
+ return IntentManager.getInstance()
def getObjectsModel(self, *args):
if self._object_manager is None:
@@ -983,6 +977,18 @@ class CuraApplication(QtApplication):
def getMachineActionManager(self, *args):
return self._machine_action_manager
+ @pyqtSlot(result = QObject)
+ def getMaterialManagementModel(self) -> MaterialManagementModel:
+ if not self._material_management_model:
+ self._material_management_model = MaterialManagementModel(parent = self)
+ return self._material_management_model
+
+ @pyqtSlot(result = QObject)
+ def getQualityManagementModel(self) -> QualityManagementModel:
+ if not self._quality_management_model:
+ self._quality_management_model = QualityManagementModel(parent = self)
+ return self._quality_management_model
+
def getSimpleModeSettingsManager(self, *args):
if self._simple_mode_settings_manager is None:
self._simple_mode_settings_manager = SimpleModeSettingsManager()
@@ -1036,6 +1042,7 @@ class CuraApplication(QtApplication):
qmlRegisterSingletonType(CuraSceneController, "Cura", 1, 0, "SceneController", self.getCuraSceneController)
qmlRegisterSingletonType(ExtruderManager, "Cura", 1, 0, "ExtruderManager", self.getExtruderManager)
qmlRegisterSingletonType(MachineManager, "Cura", 1, 0, "MachineManager", self.getMachineManager)
+ qmlRegisterSingletonType(IntentManager, "Cura", 1, 6, "IntentManager", self.getIntentManager)
qmlRegisterSingletonType(SettingInheritanceManager, "Cura", 1, 0, "SettingInheritanceManager", self.getSettingInheritanceManager)
qmlRegisterSingletonType(SimpleModeSettingsManager, "Cura", 1, 0, "SimpleModeSettingsManager", self.getSimpleModeSettingsManager)
qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, "MachineActionManager", self.getMachineActionManager)
@@ -1060,7 +1067,8 @@ class CuraApplication(QtApplication):
qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel")
qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel")
qmlRegisterType(MaterialBrandsModel, "Cura", 1, 0, "MaterialBrandsModel")
- qmlRegisterType(QualityManagementModel, "Cura", 1, 0, "QualityManagementModel")
+ qmlRegisterSingletonType(QualityManagementModel, "Cura", 1, 0, "QualityManagementModel", self.getQualityManagementModel)
+ qmlRegisterSingletonType(MaterialManagementModel, "Cura", 1, 5, "MaterialManagementModel", self.getMaterialManagementModel)
qmlRegisterType(DiscoveredPrintersModel, "Cura", 1, 0, "DiscoveredPrintersModel")
@@ -1069,6 +1077,8 @@ class CuraApplication(QtApplication):
qmlRegisterSingletonType(CustomQualityProfilesDropDownMenuModel, "Cura", 1, 0,
"CustomQualityProfilesDropDownMenuModel", self.getCustomQualityProfilesDropDownMenuModel)
qmlRegisterType(NozzleModel, "Cura", 1, 0, "NozzleModel")
+ qmlRegisterType(IntentModel, "Cura", 1, 6, "IntentModel")
+ qmlRegisterType(IntentCategoryModel, "Cura", 1, 6, "IntentCategoryModel")
qmlRegisterType(MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler")
qmlRegisterType(SettingVisibilityPresetsModel, "Cura", 1, 0, "SettingVisibilityPresetsModel")
@@ -1360,16 +1370,19 @@ class CuraApplication(QtApplication):
for node in nodes:
mesh_data = node.getMeshData()
- if mesh_data and mesh_data.getFileName():
- job = ReadMeshJob(mesh_data.getFileName())
- job._node = node # type: ignore
- job.finished.connect(self._reloadMeshFinished)
- if has_merged_nodes:
- job.finished.connect(self.updateOriginOfMergedMeshes)
- job.start()
- else:
- Logger.log("w", "Unable to reload data because we don't have a filename.")
+ if mesh_data:
+ file_name = mesh_data.getFileName()
+ if file_name:
+ job = ReadMeshJob(file_name)
+ job._node = node # type: ignore
+ job.finished.connect(self._reloadMeshFinished)
+ if has_merged_nodes:
+ job.finished.connect(self.updateOriginOfMergedMeshes)
+
+ job.start()
+ else:
+ Logger.log("w", "Unable to reload data because we don't have a filename.")
@pyqtSlot("QStringList")
def setExpandedCategories(self, categories: List[str]) -> None:
@@ -1788,7 +1801,7 @@ class CuraApplication(QtApplication):
try:
result = workspace_reader.preRead(file_path, show_dialog=False)
return result == WorkspaceReader.PreReadResult.accepted
- except Exception as e:
+ except Exception:
Logger.logException("e", "Could not check file %s", file_url)
return False
@@ -1884,3 +1897,7 @@ class CuraApplication(QtApplication):
op.push()
from UM.Scene.Selection import Selection
Selection.clear()
+
+ @classmethod
+ def getInstance(cls, *args, **kwargs) -> "CuraApplication":
+ return cast(CuraApplication, super().getInstance(**kwargs))
diff --git a/cura/LayerPolygon.py b/cura/LayerPolygon.py
index a62083945b..0d6489aaa2 100644
--- a/cura/LayerPolygon.py
+++ b/cura/LayerPolygon.py
@@ -1,7 +1,7 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from UM.Application import Application
+from UM.Qt.QtApplication import QtApplication
from typing import Any, Optional
import numpy
@@ -232,7 +232,7 @@ class LayerPolygon:
@classmethod
def getColorMap(cls):
if cls.__color_map is None:
- theme = Application.getInstance().getTheme()
+ theme = QtApplication.getInstance().getTheme()
cls.__color_map = numpy.array([
theme.getColor("layerview_none").getRgbF(), # NoneType
theme.getColor("layerview_inset_0").getRgbF(), # Inset0Type
diff --git a/cura/Machines/ContainerNode.py b/cura/Machines/ContainerNode.py
index eef1c63127..a8bbf0a537 100644
--- a/cura/Machines/ContainerNode.py
+++ b/cura/Machines/ContainerNode.py
@@ -1,64 +1,64 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional, Any, Dict, Union, TYPE_CHECKING
-
-from collections import OrderedDict
+from typing import Any, Dict, Optional
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
+from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Logger import Logger
from UM.Settings.InstanceContainer import InstanceContainer
-##
-# A metadata / container combination. Use getContainer() to get the container corresponding to the metadata.
-#
-# ContainerNode is a multi-purpose class. It has two main purposes:
-# 1. It encapsulates an InstanceContainer. It contains that InstanceContainer's
-# - metadata (Always)
-# - container (lazy-loaded when needed)
-# 2. It also serves as a node in a hierarchical InstanceContainer lookup table/tree.
-# This is used in Variant, Material, and Quality Managers.
+## A node in the container tree. It represents one container.
#
+# The container it represents is referenced by its container_id. During normal
+# use of the tree, this container is not constructed. Only when parts of the
+# tree need to get loaded in the container stack should it get constructed.
class ContainerNode:
- __slots__ = ("_metadata", "_container", "children_map")
+ ## Creates a new node for the container tree.
+ # \param container_id The ID of the container that this node should
+ # represent.
+ def __init__(self, container_id: str) -> None:
+ self.container_id = container_id
+ self._container = None # type: Optional[InstanceContainer]
+ self.children_map = {} # type: Dict[str, ContainerNode] # Mapping from container ID to container node.
- def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None:
- self._metadata = metadata
- self._container = None # type: Optional[InstanceContainer]
- self.children_map = OrderedDict() # type: ignore # This is because it's children are supposed to override it.
+ ## Gets the metadata of the container that this node represents.
+ # Getting the metadata from the container directly is about 10x as fast.
+ # \return The metadata of the container in this node.
+ def getMetadata(self):
+ return ContainerRegistry.getInstance().findContainersMetadata(id = self.container_id)[0]
- ## Get an entry value from the metadata
+ ## Get an entry from the metadata of the container that this node contains.
+ #
+ # This is just a convenience function.
+ # \param entry The metadata entry key to return.
+ # \param default If the metadata is not present or the container is not
+ # found, the value of this default is returned.
+ # \return The value of the metadata entry, or the default if it was not
+ # present.
def getMetaDataEntry(self, entry: str, default: Any = None) -> Any:
- if self._metadata is None:
+ container_metadata = ContainerRegistry.getInstance().findContainersMetadata(id = self.container_id)
+ if len(container_metadata) == 0:
return default
- return self._metadata.get(entry, default)
+ return container_metadata[0].get(entry, default)
- def getMetadata(self) -> Dict[str, Any]:
- if self._metadata is None:
- return {}
- return self._metadata
-
- def getChildNode(self, child_key: str) -> Optional["ContainerNode"]:
- return self.children_map.get(child_key)
-
- def getContainer(self) -> Optional["InstanceContainer"]:
- if self._metadata is None:
- Logger.log("e", "Cannot get container for a ContainerNode without metadata.")
- return None
-
- if self._container is None:
- container_id = self._metadata["id"]
- from UM.Settings.ContainerRegistry import ContainerRegistry
- container_list = ContainerRegistry.getInstance().findInstanceContainers(id = container_id)
- if not container_list:
- Logger.log("e", "Failed to lazy-load container [{container_id}]. Cannot find it.".format(container_id = container_id))
+ ## The container that this node's container ID refers to.
+ #
+ # This can be used to finally instantiate the container in order to put it
+ # in the container stack.
+ # \return A container.
+ @property
+ def container(self) -> Optional[InstanceContainer]:
+ if not self._container:
+ container_list = ContainerRegistry.getInstance().findInstanceContainers(id = self.container_id)
+ if len(container_list) == 0:
+ Logger.log("e", "Failed to lazy-load container [{container_id}]. Cannot find it.".format(container_id = self.container_id))
error_message = ConfigurationErrorMessage.getInstance()
- error_message.addFaultyContainers(container_id)
+ error_message.addFaultyContainers(self.container_id)
return None
self._container = container_list[0]
-
return self._container
def __str__(self) -> str:
- return "%s[%s]" % (self.__class__.__name__, self.getMetaDataEntry("id"))
+ return "%s[%s]" % (self.__class__.__name__, self.container_id)
\ No newline at end of file
diff --git a/cura/Machines/ContainerTree.py b/cura/Machines/ContainerTree.py
new file mode 100644
index 0000000000..c2bfabea2c
--- /dev/null
+++ b/cura/Machines/ContainerTree.py
@@ -0,0 +1,158 @@
+# Copyright (c) 2019 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from UM.Job import Job # For our background task of loading MachineNodes lazily.
+from UM.JobQueue import JobQueue # For our background task of loading MachineNodes lazily.
+from UM.Logger import Logger
+from UM.Settings.ContainerRegistry import ContainerRegistry # To listen to containers being added.
+from UM.Signal import Signal
+import cura.CuraApplication # Imported like this to prevent circular dependencies.
+from cura.Machines.MachineNode import MachineNode
+from cura.Settings.GlobalStack import GlobalStack # To listen only to global stacks being added.
+
+from typing import Dict, List, Optional, TYPE_CHECKING
+import time
+
+if TYPE_CHECKING:
+ from cura.Machines.QualityGroup import QualityGroup
+ from cura.Machines.QualityChangesGroup import QualityChangesGroup
+ from UM.Settings.ContainerStack import ContainerStack
+
+
+## This class contains a look-up tree for which containers are available at
+# which stages of configuration.
+#
+# The tree starts at the machine definitions. For every distinct definition
+# there will be one machine node here.
+#
+# All of the fallbacks for material choices, quality choices, etc. should be
+# encoded in this tree. There must always be at least one child node (for
+# nodes that have children) but that child node may be a node representing the
+# empty instance container.
+class ContainerTree:
+ __instance = None
+
+ @classmethod
+ def getInstance(cls):
+ if cls.__instance is None:
+ cls.__instance = ContainerTree()
+ return cls.__instance
+
+ def __init__(self) -> None:
+ self.machines = self._MachineNodeMap() # Mapping from definition ID to machine nodes with lazy loading.
+ self.materialsChanged = Signal() # Emitted when any of the material nodes in the tree got changed.
+ cura.CuraApplication.CuraApplication.getInstance().initializationFinished.connect(self._onStartupFinished) # Start the background task to load more machine nodes after start-up is completed.
+
+ ## Get the quality groups available for the currently activated printer.
+ #
+ # This contains all quality groups, enabled or disabled. To check whether
+ # the quality group can be activated, test for the
+ # ``QualityGroup.is_available`` property.
+ # \return For every quality type, one quality group.
+ def getCurrentQualityGroups(self) -> Dict[str, "QualityGroup"]:
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if global_stack is None:
+ return {}
+ variant_names = [extruder.variant.getName() for extruder in global_stack.extruderList]
+ material_bases = [extruder.material.getMetaDataEntry("base_file") for extruder in global_stack.extruderList]
+ extruder_enabled = [extruder.isEnabled for extruder in global_stack.extruderList]
+ return self.machines[global_stack.definition.getId()].getQualityGroups(variant_names, material_bases, extruder_enabled)
+
+ ## Get the quality changes groups available for the currently activated
+ # printer.
+ #
+ # This contains all quality changes groups, enabled or disabled. To check
+ # whether the quality changes group can be activated, test for the
+ # ``QualityChangesGroup.is_available`` property.
+ # \return A list of all quality changes groups.
+ def getCurrentQualityChangesGroups(self) -> List["QualityChangesGroup"]:
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if global_stack is None:
+ return []
+ variant_names = [extruder.variant.getName() for extruder in global_stack.extruderList]
+ material_bases = [extruder.material.getMetaDataEntry("base_file") for extruder in global_stack.extruderList]
+ extruder_enabled = [extruder.isEnabled for extruder in global_stack.extruderList]
+ return self.machines[global_stack.definition.getId()].getQualityChangesGroups(variant_names, material_bases, extruder_enabled)
+
+ ## Ran after completely starting up the application.
+ def _onStartupFinished(self):
+ currently_added = ContainerRegistry.getInstance().findContainerStacks() # Find all currently added global stacks.
+ JobQueue.getInstance().add(self._MachineNodeLoadJob(self, currently_added))
+
+ ## Dictionary-like object that contains the machines.
+ #
+ # This handles the lazy loading of MachineNodes.
+ class _MachineNodeMap:
+ def __init__(self) -> None:
+ self._machines = {} # type: Dict[str, MachineNode]
+
+ ## Returns whether a printer with a certain definition ID exists. This
+ # is regardless of whether or not the printer is loaded yet.
+ # \param definition_id The definition to look for.
+ # \return Whether or not a printer definition exists with that name.
+ def __contains__(self, definition_id: str) -> bool:
+ return len(ContainerRegistry.getInstance().findContainersMetadata(id = definition_id)) > 0
+
+ ## Returns a machine node for the specified definition ID.
+ #
+ # If the machine node wasn't loaded yet, this will load it lazily.
+ # \param definition_id The definition to look for.
+ # \return A machine node for that definition.
+ def __getitem__(self, definition_id: str) -> MachineNode:
+ if definition_id not in self._machines:
+ start_time = time.time()
+ self._machines[definition_id] = MachineNode(definition_id)
+ self._machines[definition_id].materialsChanged.connect(ContainerTree.getInstance().materialsChanged)
+ Logger.log("d", "Adding container tree for {definition_id} took {duration} seconds.".format(definition_id = definition_id, duration = time.time() - start_time))
+ return self._machines[definition_id]
+
+ ## Gets a machine node for the specified definition ID, with default.
+ #
+ # The default is returned if there is no definition with the specified
+ # ID. If the machine node wasn't loaded yet, this will load it lazily.
+ # \param definition_id The definition to look for.
+ # \param default The machine node to return if there is no machine
+ # with that definition (can be ``None`` optionally or if not
+ # provided).
+ # \return A machine node for that definition, or the default if there
+ # is no definition with the provided definition_id.
+ def get(self, definition_id: str, default: Optional[MachineNode] = None) -> Optional[MachineNode]:
+ if definition_id not in self:
+ return default
+ return self[definition_id]
+
+ ## Returns whether we've already cached this definition's node.
+ # \param definition_id The definition that we may have cached.
+ # \return ``True`` if it's cached.
+ def is_loaded(self, definition_id: str) -> bool:
+ return definition_id in self._machines
+
+ ## Pre-loads all currently added printers as a background task so that
+ # switching printers in the interface is faster.
+ class _MachineNodeLoadJob(Job):
+ ## Creates a new background task.
+ # \param tree_root The container tree instance. This cannot be
+ # obtained through the singleton static function since the instance
+ # may not yet be constructed completely.
+ # \param container_stacks All of the stacks to pre-load the container
+ # trees for. This needs to be provided from here because the stacks
+ # need to be constructed on the main thread because they are QObject.
+ def __init__(self, tree_root: "ContainerTree", container_stacks: List["ContainerStack"]):
+ self.tree_root = tree_root
+ self.container_stacks = container_stacks
+ super().__init__()
+
+ ## Starts the background task.
+ #
+ # The ``JobQueue`` will schedule this on a different thread.
+ def run(self) -> None:
+ for stack in self.container_stacks: # Load all currently-added containers.
+ if not isinstance(stack, GlobalStack):
+ continue
+ # Allow a thread switch after every container.
+ # Experimentally, sleep(0) didn't allow switching. sleep(0.1) or sleep(0.2) neither.
+ # We're in no hurry though. Half a second is fine.
+ time.sleep(0.5)
+ definition_id = stack.definition.getId()
+ if not self.tree_root.machines.is_loaded(definition_id):
+ _ = self.tree_root.machines[definition_id]
diff --git a/cura/Machines/IntentNode.py b/cura/Machines/IntentNode.py
new file mode 100644
index 0000000000..2b3a596f81
--- /dev/null
+++ b/cura/Machines/IntentNode.py
@@ -0,0 +1,21 @@
+# Copyright (c) 2019 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from typing import TYPE_CHECKING
+
+from UM.Settings.ContainerRegistry import ContainerRegistry
+
+from cura.Machines.ContainerNode import ContainerNode
+
+if TYPE_CHECKING:
+ from cura.Machines.QualityNode import QualityNode
+
+
+## This class represents an intent profile in the container tree.
+#
+# This class has no more subnodes.
+class IntentNode(ContainerNode):
+ def __init__(self, container_id: str, quality: "QualityNode") -> None:
+ super().__init__(container_id)
+ self.quality = quality
+ self.intent_category = ContainerRegistry.getInstance().findContainersMetadata(id = container_id)[0].get("intent_category", "default")
diff --git a/cura/Machines/MachineErrorChecker.py b/cura/Machines/MachineErrorChecker.py
index cfeeb630df..4c6ed891b1 100644
--- a/cura/Machines/MachineErrorChecker.py
+++ b/cura/Machines/MachineErrorChecker.py
@@ -58,7 +58,6 @@ class MachineErrorChecker(QObject):
# Whenever the machine settings get changed, we schedule an error check.
self._machine_manager.globalContainerChanged.connect(self.startErrorCheck)
- self._machine_manager.globalValueChanged.connect(self.startErrorCheck)
self._onMachineChanged()
diff --git a/cura/Machines/MachineNode.py b/cura/Machines/MachineNode.py
new file mode 100644
index 0000000000..92f71b409b
--- /dev/null
+++ b/cura/Machines/MachineNode.py
@@ -0,0 +1,183 @@
+# Copyright (c) 2019 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from typing import Dict, List
+
+from UM.Logger import Logger
+from UM.Signal import Signal
+from UM.Util import parseBool
+from UM.Settings.ContainerRegistry import ContainerRegistry # To find all the variants for this machine.
+
+import cura.CuraApplication # Imported like this to prevent circular dependencies.
+from cura.Machines.ContainerNode import ContainerNode
+from cura.Machines.QualityChangesGroup import QualityChangesGroup # To construct groups of quality changes profiles that belong together.
+from cura.Machines.QualityGroup import QualityGroup # To construct groups of quality profiles that belong together.
+from cura.Machines.QualityNode import QualityNode
+from cura.Machines.VariantNode import VariantNode
+import UM.FlameProfiler
+
+
+## This class represents a machine in the container tree.
+#
+# The subnodes of these nodes are variants.
+class MachineNode(ContainerNode):
+ def __init__(self, container_id: str) -> None:
+ super().__init__(container_id)
+ self.variants = {} # type: Dict[str, VariantNode] # Mapping variant names to their nodes.
+ self.global_qualities = {} # type: Dict[str, QualityNode] # Mapping quality types to the global quality for those types.
+ self.materialsChanged = Signal() # Emitted when one of the materials underneath this machine has been changed.
+
+ container_registry = ContainerRegistry.getInstance()
+ try:
+ my_metadata = container_registry.findContainersMetadata(id = container_id)[0]
+ except IndexError:
+ Logger.log("Unable to find metadata for container %s", container_id)
+ my_metadata = {}
+ # Some of the metadata is cached upon construction here.
+ # ONLY DO THAT FOR METADATA THAT DOESN'T CHANGE DURING RUNTIME!
+ # Otherwise you need to keep it up-to-date during runtime.
+ self.has_materials = parseBool(my_metadata.get("has_materials", "true"))
+ self.has_variants = parseBool(my_metadata.get("has_variants", "false"))
+ self.has_machine_quality = parseBool(my_metadata.get("has_machine_quality", "false"))
+ self.quality_definition = my_metadata.get("quality_definition", container_id) if self.has_machine_quality else "fdmprinter"
+ self.exclude_materials = my_metadata.get("exclude_materials", [])
+ self.preferred_variant_name = my_metadata.get("preferred_variant_name", "")
+ self.preferred_material = my_metadata.get("preferred_material", "")
+ self.preferred_quality_type = my_metadata.get("preferred_quality_type", "")
+
+ self._loadAll()
+
+ ## Get the available quality groups for this machine.
+ #
+ # This returns all quality groups, regardless of whether they are
+ # available to the combination of extruders or not. On the resulting
+ # quality groups, the is_available property is set to indicate whether the
+ # quality group can be selected according to the combination of extruders
+ # in the parameters.
+ # \param variant_names The names of the variants loaded in each extruder.
+ # \param material_bases The base file names of the materials loaded in
+ # each extruder.
+ # \param extruder_enabled Whether or not the extruders are enabled. This
+ # allows the function to set the is_available properly.
+ # \return For each available quality type, a QualityGroup instance.
+ def getQualityGroups(self, variant_names: List[str], material_bases: List[str], extruder_enabled: List[bool]) -> Dict[str, QualityGroup]:
+ if len(variant_names) != len(material_bases) or len(variant_names) != len(extruder_enabled):
+ Logger.log("e", "The number of extruders in the list of variants (" + str(len(variant_names)) + ") is not equal to the number of extruders in the list of materials (" + str(len(material_bases)) + ") or the list of enabled extruders (" + str(len(extruder_enabled)) + ").")
+ return {}
+ # For each extruder, find which quality profiles are available. Later we'll intersect the quality types.
+ qualities_per_type_per_extruder = [{}] * len(variant_names) # type: List[Dict[str, QualityNode]]
+ for extruder_nr, variant_name in enumerate(variant_names):
+ if not extruder_enabled[extruder_nr]:
+ continue # No qualities are available in this extruder. It'll get skipped when calculating the available quality types.
+ material_base = material_bases[extruder_nr]
+ if variant_name not in self.variants or material_base not in self.variants[variant_name].materials:
+ # The printer has no variant/material-specific quality profiles. Use the global quality profiles.
+ qualities_per_type_per_extruder[extruder_nr] = self.global_qualities
+ else:
+ # Use the actually specialised quality profiles.
+ qualities_per_type_per_extruder[extruder_nr] = {node.quality_type: node for node in self.variants[variant_name].materials[material_base].qualities.values()}
+
+ # Create the quality group for each available type.
+ quality_groups = {}
+ for quality_type, global_quality_node in self.global_qualities.items():
+ if not global_quality_node.container:
+ Logger.log("w", "Node {0} doesn't have a container.".format(global_quality_node.container_id))
+ continue
+ quality_groups[quality_type] = QualityGroup(name = global_quality_node.getMetaDataEntry("name", "Unnamed profile"), quality_type = quality_type)
+ quality_groups[quality_type].node_for_global = global_quality_node
+ for extruder_position, qualities_per_type in enumerate(qualities_per_type_per_extruder):
+ if quality_type in qualities_per_type:
+ quality_groups[quality_type].setExtruderNode(extruder_position, qualities_per_type[quality_type])
+
+ available_quality_types = set(quality_groups.keys())
+ for extruder_nr, qualities_per_type in enumerate(qualities_per_type_per_extruder):
+ if not extruder_enabled[extruder_nr]:
+ continue
+ available_quality_types.intersection_update(qualities_per_type.keys())
+ for quality_type in available_quality_types:
+ quality_groups[quality_type].is_available = True
+ return quality_groups
+
+ ## Returns all of the quality changes groups available to this printer.
+ #
+ # The quality changes groups store which quality type and intent category
+ # they were made for, but not which material and nozzle. Instead for the
+ # quality type and intent category, the quality changes will always be
+ # available but change the quality type and intent category when
+ # activated.
+ #
+ # The quality changes group does depend on the printer: Which quality
+ # definition is used.
+ #
+ # The quality changes groups that are available do depend on the quality
+ # types that are available, so it must still be known which extruders are
+ # enabled and which materials and variants are loaded in them. This allows
+ # setting the correct is_available flag.
+ # \param variant_names The names of the variants loaded in each extruder.
+ # \param material_bases The base file names of the materials loaded in
+ # each extruder.
+ # \param extruder_enabled For each extruder whether or not they are
+ # enabled.
+ # \return List of all quality changes groups for the printer.
+ def getQualityChangesGroups(self, variant_names: List[str], material_bases: List[str], extruder_enabled: List[bool]) -> List[QualityChangesGroup]:
+ machine_quality_changes = ContainerRegistry.getInstance().findContainersMetadata(type = "quality_changes", definition = self.quality_definition) # All quality changes for each extruder.
+
+ groups_by_name = {} #type: Dict[str, QualityChangesGroup] # Group quality changes profiles by their display name. The display name must be unique for quality changes. This finds profiles that belong together in a group.
+ for quality_changes in machine_quality_changes:
+ name = quality_changes["name"]
+ if name not in groups_by_name:
+ # CURA-6599
+ # For some reason, QML will get null or fail to convert type for MachineManager.activeQualityChangesGroup() to
+ # a QObject. Setting the object ownership to QQmlEngine.CppOwnership doesn't work, but setting the object
+ # parent to application seems to work.
+ from cura.CuraApplication import CuraApplication
+ groups_by_name[name] = QualityChangesGroup(name, quality_type = quality_changes["quality_type"],
+ intent_category = quality_changes.get("intent_category", "default"),
+ parent = CuraApplication.getInstance())
+ # CURA-6882
+ # Custom qualities are always available, even if they are based on the "not supported" profile.
+ groups_by_name[name].is_available = True
+ elif groups_by_name[name].intent_category == "default": # Intent category should be stored as "default" if everything is default or as the intent if any of the extruder have an actual intent.
+ groups_by_name[name].intent_category = quality_changes.get("intent_category", "default")
+
+ if quality_changes.get("position") is not None and quality_changes.get("position") != "None": # An extruder profile.
+ groups_by_name[name].metadata_per_extruder[int(quality_changes["position"])] = quality_changes
+ else: # Global profile.
+ groups_by_name[name].metadata_for_global = quality_changes
+
+ return list(groups_by_name.values())
+
+ ## Gets the preferred global quality node, going by the preferred quality
+ # type.
+ #
+ # If the preferred global quality is not in there, an arbitrary global
+ # quality is taken.
+ # If there are no global qualities, an empty quality is returned.
+ def preferredGlobalQuality(self) -> "QualityNode":
+ return self.global_qualities.get(self.preferred_quality_type, next(iter(self.global_qualities.values())))
+
+ ## (Re)loads all variants under this printer.
+ @UM.FlameProfiler.profile
+ def _loadAll(self) -> None:
+ container_registry = ContainerRegistry.getInstance()
+ if not self.has_variants:
+ self.variants["empty"] = VariantNode("empty_variant", machine = self)
+ else:
+ # Find all the variants for this definition ID.
+ variants = container_registry.findInstanceContainersMetadata(type = "variant", definition = self.container_id, hardware_type = "nozzle")
+ for variant in variants:
+ variant_name = variant["name"]
+ if variant_name not in self.variants:
+ self.variants[variant_name] = VariantNode(variant["id"], machine = self)
+ self.variants[variant_name].materialsChanged.connect(self.materialsChanged)
+ if not self.variants:
+ self.variants["empty"] = VariantNode("empty_variant", machine = self)
+
+ # Find the global qualities for this printer.
+ global_qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.quality_definition, global_quality = "True") # First try specific to this printer.
+ if len(global_qualities) == 0: # This printer doesn't override the global qualities.
+ global_qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = "fdmprinter", global_quality = "True") # Otherwise pick the global global qualities.
+ if len(global_qualities) == 0: # There are no global qualities either?! Something went very wrong, but we'll not crash and properly fill the tree.
+ global_qualities = [cura.CuraApplication.CuraApplication.getInstance().empty_quality_container.getMetaData()]
+ for global_quality in global_qualities:
+ self.global_qualities[global_quality["quality_type"]] = QualityNode(global_quality["id"], parent = self)
diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py
deleted file mode 100644
index 90012325c8..0000000000
--- a/cura/Machines/MaterialManager.py
+++ /dev/null
@@ -1,723 +0,0 @@
-# Copyright (c) 2018 Ultimaker B.V.
-# Cura is released under the terms of the LGPLv3 or higher.
-
-from collections import defaultdict, OrderedDict
-import copy
-import uuid
-from typing import Dict, Optional, TYPE_CHECKING, Any, Set, List, cast, Tuple
-
-from PyQt5.Qt import QTimer, QObject, pyqtSignal, pyqtSlot
-
-from UM.Application import Application
-from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
-from UM.Logger import Logger
-from UM.Settings.ContainerRegistry import ContainerRegistry
-from UM.Settings.SettingFunction import SettingFunction
-from UM.Util import parseBool
-
-from .MaterialNode import MaterialNode
-from .MaterialGroup import MaterialGroup
-from .VariantType import VariantType
-
-if TYPE_CHECKING:
- from UM.Settings.DefinitionContainer import DefinitionContainer
- from UM.Settings.InstanceContainer import InstanceContainer
- from cura.Settings.GlobalStack import GlobalStack
- from cura.Settings.ExtruderStack import ExtruderStack
-
-
-#
-# MaterialManager maintains a number of maps and trees for material lookup.
-# The models GUI and QML use are now only dependent on the MaterialManager. That means as long as the data in
-# MaterialManager gets updated correctly, the GUI models should be updated correctly too, and the same goes for GUI.
-#
-# For now, updating the lookup maps and trees here is very simple: we discard the old data completely and recreate them
-# again. This means the update is exactly the same as initialization. There are performance concerns about this approach
-# but so far the creation of the tables and maps is very fast and there is no noticeable slowness, we keep it like this
-# because it's simple.
-#
-class MaterialManager(QObject):
-
- materialsUpdated = pyqtSignal() # Emitted whenever the material lookup tables are updated.
- favoritesUpdated = pyqtSignal() # Emitted whenever the favorites are changed
-
- def __init__(self, container_registry, parent = None):
- super().__init__(parent)
- self._application = Application.getInstance()
- self._container_registry = container_registry # type: ContainerRegistry
-
- # Material_type -> generic material metadata
- self._fallback_materials_map = dict() # type: Dict[str, Dict[str, Any]]
-
- # Root_material_id -> MaterialGroup
- self._material_group_map = dict() # type: Dict[str, MaterialGroup]
-
- # Approximate diameter str
- self._diameter_machine_nozzle_buildplate_material_map = dict() # type: Dict[str, Dict[str, MaterialNode]]
-
- # We're using these two maps to convert between the specific diameter material id and the generic material id
- # because the generic material ids are used in qualities and definitions, while the specific diameter material is meant
- # i.e. generic_pla -> generic_pla_175
- # root_material_id -> approximate diameter str -> root_material_id for that diameter
- self._material_diameter_map = defaultdict(dict) # type: Dict[str, Dict[str, str]]
-
- # Material id including diameter (generic_pla_175) -> material root id (generic_pla)
- self._diameter_material_map = dict() # type: Dict[str, str]
-
- # This is used in Legacy UM3 send material function and the material management page.
- # GUID -> a list of material_groups
- self._guid_material_groups_map = defaultdict(list) # type: Dict[str, List[MaterialGroup]]
-
- # The machine definition ID for the non-machine-specific materials.
- # This is used as the last fallback option if the given machine-specific material(s) cannot be found.
- self._default_machine_definition_id = "fdmprinter"
- self._default_approximate_diameter_for_quality_search = "3"
-
- # When a material gets added/imported, there can be more than one InstanceContainers. In those cases, we don't
- # want to react on every container/metadata changed signal. The timer here is to buffer it a bit so we don't
- # react too many time.
- self._update_timer = QTimer(self)
- self._update_timer.setInterval(300)
- self._update_timer.setSingleShot(True)
- self._update_timer.timeout.connect(self._updateMaps)
-
- self._container_registry.containerMetaDataChanged.connect(self._onContainerMetadataChanged)
- self._container_registry.containerAdded.connect(self._onContainerMetadataChanged)
- self._container_registry.containerRemoved.connect(self._onContainerMetadataChanged)
-
- self._favorites = set() # type: Set[str]
-
- def initialize(self) -> None:
- # Find all materials and put them in a matrix for quick search.
- material_metadatas = {metadata["id"]: metadata for metadata in
- self._container_registry.findContainersMetadata(type = "material") if
- metadata.get("GUID")} # type: Dict[str, Dict[str, Any]]
-
- self._material_group_map = dict()
-
- # Map #1
- # root_material_id -> MaterialGroup
- for material_id, material_metadata in material_metadatas.items():
- # We don't store empty material in the lookup tables
- if material_id == "empty_material":
- continue
-
- root_material_id = material_metadata.get("base_file", "")
- if root_material_id not in material_metadatas: #Not a registered material profile. Don't store this in the look-up tables.
- continue
- if root_material_id not in self._material_group_map:
- self._material_group_map[root_material_id] = MaterialGroup(root_material_id, MaterialNode(material_metadatas[root_material_id]))
- self._material_group_map[root_material_id].is_read_only = self._container_registry.isReadOnly(root_material_id)
- group = self._material_group_map[root_material_id]
-
- # Store this material in the group of the appropriate root material.
- if material_id != root_material_id:
- new_node = MaterialNode(material_metadata)
- group.derived_material_node_list.append(new_node)
-
- # Order this map alphabetically so it's easier to navigate in a debugger
- self._material_group_map = OrderedDict(sorted(self._material_group_map.items(), key = lambda x: x[0]))
-
- # Map #1.5
- # GUID -> material group list
- self._guid_material_groups_map = defaultdict(list)
- for root_material_id, material_group in self._material_group_map.items():
- guid = material_group.root_material_node.getMetaDataEntry("GUID", "")
- self._guid_material_groups_map[guid].append(material_group)
-
- # Map #2
- # Lookup table for material type -> fallback material metadata, only for read-only materials
- grouped_by_type_dict = dict() # type: Dict[str, Any]
- material_types_without_fallback = set()
- for root_material_id, material_node in self._material_group_map.items():
- material_type = material_node.root_material_node.getMetaDataEntry("material", "")
- if material_type not in grouped_by_type_dict:
- grouped_by_type_dict[material_type] = {"generic": None,
- "others": []}
- material_types_without_fallback.add(material_type)
- brand = material_node.root_material_node.getMetaDataEntry("brand", "")
- if brand.lower() == "generic":
- to_add = True
- if material_type in grouped_by_type_dict:
- diameter = material_node.root_material_node.getMetaDataEntry("approximate_diameter", "")
- if diameter != self._default_approximate_diameter_for_quality_search:
- to_add = False # don't add if it's not the default diameter
-
- if to_add:
- # Checking this first allow us to differentiate between not read only materials:
- # - if it's in the list, it means that is a new material without fallback
- # - if it is not, then it is a custom material with a fallback material (parent)
- if material_type in material_types_without_fallback:
- grouped_by_type_dict[material_type] = material_node.root_material_node._metadata
- material_types_without_fallback.remove(material_type)
-
- # Remove the materials that have no fallback materials
- for material_type in material_types_without_fallback:
- del grouped_by_type_dict[material_type]
- self._fallback_materials_map = grouped_by_type_dict
-
- # Map #3
- # There can be multiple material profiles for the same material with different diameters, such as "generic_pla"
- # and "generic_pla_175". This is inconvenient when we do material-specific quality lookup because a quality can
- # be for either "generic_pla" or "generic_pla_175", but not both. This map helps to get the correct material ID
- # for quality search.
- self._material_diameter_map = defaultdict(dict)
- self._diameter_material_map = dict()
-
- # Group the material IDs by the same name, material, brand, and color but with different diameters.
- material_group_dict = dict() # type: Dict[Tuple[Any], Dict[str, str]]
- keys_to_fetch = ("name", "material", "brand", "color")
- for root_material_id, machine_node in self._material_group_map.items():
- root_material_metadata = machine_node.root_material_node._metadata
-
- key_data_list = [] # type: List[Any]
- for key in keys_to_fetch:
- key_data_list.append(machine_node.root_material_node.getMetaDataEntry(key))
- key_data = cast(Tuple[Any], tuple(key_data_list)) # type: Tuple[Any]
-
- # If the key_data doesn't exist, it doesn't matter if the material is read only...
- if key_data not in material_group_dict:
- material_group_dict[key_data] = dict()
- else:
- # ...but if key_data exists, we just overwrite it if the material is read only, otherwise we skip it
- if not machine_node.is_read_only:
- continue
- approximate_diameter = machine_node.root_material_node.getMetaDataEntry("approximate_diameter", "")
- material_group_dict[key_data][approximate_diameter] = machine_node.root_material_node.getMetaDataEntry("id", "")
-
- # Map [root_material_id][diameter] -> root_material_id for this diameter
- for data_dict in material_group_dict.values():
- for root_material_id1 in data_dict.values():
- if root_material_id1 in self._material_diameter_map:
- continue
- diameter_map = data_dict
- for root_material_id2 in data_dict.values():
- self._material_diameter_map[root_material_id2] = diameter_map
-
- default_root_material_id = data_dict.get(self._default_approximate_diameter_for_quality_search)
- if default_root_material_id is None:
- default_root_material_id = list(data_dict.values())[0] # no default diameter present, just take "the" only one
- for root_material_id in data_dict.values():
- self._diameter_material_map[root_material_id] = default_root_material_id
-
- # Map #4
- # "machine" -> "nozzle name" -> "buildplate name" -> "root material ID" -> specific material InstanceContainer
- self._diameter_machine_nozzle_buildplate_material_map = dict()
- for material_metadata in material_metadatas.values():
- self.__addMaterialMetadataIntoLookupTree(material_metadata)
-
- favorites = self._application.getPreferences().getValue("cura/favorite_materials")
- for item in favorites.split(";"):
- self._favorites.add(item)
-
- self.materialsUpdated.emit()
-
- def __addMaterialMetadataIntoLookupTree(self, material_metadata: Dict[str, Any]) -> None:
- material_id = material_metadata["id"]
-
- # We don't store empty material in the lookup tables
- if material_id == "empty_material":
- return
-
- root_material_id = material_metadata["base_file"]
- definition = material_metadata["definition"]
- approximate_diameter = str(material_metadata["approximate_diameter"])
-
- if approximate_diameter not in self._diameter_machine_nozzle_buildplate_material_map:
- self._diameter_machine_nozzle_buildplate_material_map[approximate_diameter] = {}
-
- machine_nozzle_buildplate_material_map = self._diameter_machine_nozzle_buildplate_material_map[
- approximate_diameter]
- if definition not in machine_nozzle_buildplate_material_map:
- machine_nozzle_buildplate_material_map[definition] = MaterialNode()
-
- # This is a list of information regarding the intermediate nodes:
- # nozzle -> buildplate
- nozzle_name = material_metadata.get("variant_name")
- buildplate_name = material_metadata.get("buildplate_name")
- intermediate_node_info_list = [(nozzle_name, VariantType.NOZZLE),
- (buildplate_name, VariantType.BUILD_PLATE),
- ]
-
- variant_manager = self._application.getVariantManager()
-
- machine_node = machine_nozzle_buildplate_material_map[definition]
- current_node = machine_node
- current_intermediate_node_info_idx = 0
- error_message = None # type: Optional[str]
- while current_intermediate_node_info_idx < len(intermediate_node_info_list):
- variant_name, variant_type = intermediate_node_info_list[current_intermediate_node_info_idx]
- if variant_name is not None:
- # The new material has a specific variant, so it needs to be added to that specific branch in the tree.
- variant = variant_manager.getVariantNode(definition, variant_name, variant_type)
- if variant is None:
- error_message = "Material {id} contains a variant {name} that does not exist.".format(
- id = material_metadata["id"], name = variant_name)
- break
-
- # Update the current node to advance to a more specific branch
- if variant_name not in current_node.children_map:
- current_node.children_map[variant_name] = MaterialNode()
- current_node = current_node.children_map[variant_name]
-
- current_intermediate_node_info_idx += 1
-
- if error_message is not None:
- Logger.log("e", "%s It will not be added into the material lookup tree.", error_message)
- self._container_registry.addWrongContainerId(material_metadata["id"])
- return
-
- # Add the material to the current tree node, which is the deepest (the most specific) branch we can find.
- # Sanity check: Make sure that there is no duplicated materials.
- if root_material_id in current_node.material_map:
- Logger.log("e", "Duplicated material [%s] with root ID [%s]. It has already been added.",
- material_id, root_material_id)
- ConfigurationErrorMessage.getInstance().addFaultyContainers(root_material_id)
- return
-
- current_node.material_map[root_material_id] = MaterialNode(material_metadata)
-
- def _updateMaps(self):
- Logger.log("i", "Updating material lookup data ...")
- self.initialize()
-
- def _onContainerMetadataChanged(self, container):
- self._onContainerChanged(container)
-
- def _onContainerChanged(self, container):
- container_type = container.getMetaDataEntry("type")
- if container_type != "material":
- return
-
- # update the maps
- self._update_timer.start()
-
- def getMaterialGroup(self, root_material_id: str) -> Optional[MaterialGroup]:
- return self._material_group_map.get(root_material_id)
-
- def getRootMaterialIDForDiameter(self, root_material_id: str, approximate_diameter: str) -> str:
- return self._material_diameter_map.get(root_material_id, {}).get(approximate_diameter, root_material_id)
-
- def getRootMaterialIDWithoutDiameter(self, root_material_id: str) -> str:
- return self._diameter_material_map.get(root_material_id, "")
-
- def getMaterialGroupListByGUID(self, guid: str) -> Optional[List[MaterialGroup]]:
- return self._guid_material_groups_map.get(guid)
-
- # Returns a dict of all material groups organized by root_material_id.
- def getAllMaterialGroups(self) -> Dict[str, "MaterialGroup"]:
- return self._material_group_map
-
- #
- # Return a dict with all root material IDs (k) and ContainerNodes (v) that's suitable for the given setup.
- #
- def getAvailableMaterials(self, machine_definition: "DefinitionContainer", nozzle_name: Optional[str],
- buildplate_name: Optional[str], diameter: float) -> Dict[str, MaterialNode]:
- # round the diameter to get the approximate diameter
- rounded_diameter = str(round(diameter))
- if rounded_diameter not in self._diameter_machine_nozzle_buildplate_material_map:
- Logger.log("i", "Cannot find materials with diameter [%s] (rounded to [%s])", diameter, rounded_diameter)
- return dict()
-
- machine_definition_id = machine_definition.getId()
-
- # If there are nozzle-and-or-buildplate materials, get the nozzle-and-or-buildplate material
- machine_nozzle_buildplate_material_map = self._diameter_machine_nozzle_buildplate_material_map[rounded_diameter]
- machine_node = machine_nozzle_buildplate_material_map.get(machine_definition_id)
- default_machine_node = machine_nozzle_buildplate_material_map.get(self._default_machine_definition_id)
- nozzle_node = None
- buildplate_node = None
- if nozzle_name is not None and machine_node is not None:
- nozzle_node = machine_node.getChildNode(nozzle_name)
- # Get buildplate node if possible
- if nozzle_node is not None and buildplate_name is not None:
- buildplate_node = nozzle_node.getChildNode(buildplate_name)
-
- nodes_to_check = [buildplate_node, nozzle_node, machine_node, default_machine_node]
- # Fallback mechanism of finding materials:
- # 1. buildplate-specific material
- # 2. nozzle-specific material
- # 3. machine-specific material
- # 4. generic material (for fdmprinter)
- machine_exclude_materials = machine_definition.getMetaDataEntry("exclude_materials", [])
-
- material_id_metadata_dict = dict() # type: Dict[str, MaterialNode]
- excluded_materials = set()
- for current_node in nodes_to_check:
- if current_node is None:
- continue
-
- # Only exclude the materials that are explicitly specified in the "exclude_materials" field.
- # Do not exclude other materials that are of the same type.
- for material_id, node in current_node.material_map.items():
- if material_id in machine_exclude_materials:
- excluded_materials.add(material_id)
- continue
-
- if material_id not in material_id_metadata_dict:
- material_id_metadata_dict[material_id] = node
-
- if excluded_materials:
- Logger.log("d", "Exclude materials {excluded_materials} for machine {machine_definition_id}".format(excluded_materials = ", ".join(excluded_materials), machine_definition_id = machine_definition_id))
-
- return material_id_metadata_dict
-
- #
- # A convenience function to get available materials for the given machine with the extruder position.
- #
- def getAvailableMaterialsForMachineExtruder(self, machine: "GlobalStack",
- extruder_stack: "ExtruderStack") -> Optional[Dict[str, MaterialNode]]:
- buildplate_name = machine.getBuildplateName()
- nozzle_name = None
- if extruder_stack.variant.getId() != "empty_variant":
- nozzle_name = extruder_stack.variant.getName()
- diameter = extruder_stack.getApproximateMaterialDiameter()
-
- # Fetch the available materials (ContainerNode) for the current active machine and extruder setup.
- return self.getAvailableMaterials(machine.definition, nozzle_name, buildplate_name, diameter)
-
- #
- # Gets MaterialNode for the given extruder and machine with the given material name.
- # Returns None if:
- # 1. the given machine doesn't have materials;
- # 2. cannot find any material InstanceContainers with the given settings.
- #
- def getMaterialNode(self, machine_definition_id: str, nozzle_name: Optional[str],
- buildplate_name: Optional[str], diameter: float, root_material_id: str) -> Optional["MaterialNode"]:
- # round the diameter to get the approximate diameter
- rounded_diameter = str(round(diameter))
- if rounded_diameter not in self._diameter_machine_nozzle_buildplate_material_map:
- Logger.log("i", "Cannot find materials with diameter [%s] (rounded to [%s]) for root material id [%s]",
- diameter, rounded_diameter, root_material_id)
- return None
-
- # If there are nozzle materials, get the nozzle-specific material
- machine_nozzle_buildplate_material_map = self._diameter_machine_nozzle_buildplate_material_map[rounded_diameter] # type: Dict[str, MaterialNode]
- machine_node = machine_nozzle_buildplate_material_map.get(machine_definition_id)
- nozzle_node = None
- buildplate_node = None
-
- # Fallback for "fdmprinter" if the machine-specific materials cannot be found
- if machine_node is None:
- machine_node = machine_nozzle_buildplate_material_map.get(self._default_machine_definition_id)
- if machine_node is not None and nozzle_name is not None:
- nozzle_node = machine_node.getChildNode(nozzle_name)
- if nozzle_node is not None and buildplate_name is not None:
- buildplate_node = nozzle_node.getChildNode(buildplate_name)
-
- # Fallback mechanism of finding materials:
- # 1. buildplate-specific material
- # 2. nozzle-specific material
- # 3. machine-specific material
- # 4. generic material (for fdmprinter)
- nodes_to_check = [buildplate_node, nozzle_node, machine_node,
- machine_nozzle_buildplate_material_map.get(self._default_machine_definition_id)]
-
- material_node = None
- for node in nodes_to_check:
- if node is not None:
- material_node = node.material_map.get(root_material_id)
- if material_node:
- break
-
- return material_node
-
- #
- # Gets MaterialNode for the given extruder and machine with the given material type.
- # Returns None if:
- # 1. the given machine doesn't have materials;
- # 2. cannot find any material InstanceContainers with the given settings.
- #
- def getMaterialNodeByType(self, global_stack: "GlobalStack", position: str, nozzle_name: str,
- buildplate_name: Optional[str], material_guid: str) -> Optional["MaterialNode"]:
- node = None
- machine_definition = global_stack.definition
- extruder_definition = global_stack.extruders[position].definition
- if parseBool(machine_definition.getMetaDataEntry("has_materials", False)):
- material_diameter = extruder_definition.getProperty("material_diameter", "value")
- if isinstance(material_diameter, SettingFunction):
- material_diameter = material_diameter(global_stack)
-
- # Look at the guid to material dictionary
- root_material_id = None
- for material_group in self._guid_material_groups_map[material_guid]:
- root_material_id = cast(str, material_group.root_material_node.getMetaDataEntry("id", ""))
- break
-
- if not root_material_id:
- Logger.log("i", "Cannot find materials with guid [%s] ", material_guid)
- return None
-
- node = self.getMaterialNode(machine_definition.getId(), nozzle_name, buildplate_name,
- material_diameter, root_material_id)
- return node
-
- # There are 2 ways to get fallback materials;
- # - A fallback by type (@sa getFallbackMaterialIdByMaterialType), which adds the generic version of this material
- # - A fallback by GUID; If a material has been duplicated, it should also check if the original materials do have
- # a GUID. This should only be done if the material itself does not have a quality just yet.
- def getFallBackMaterialIdsByMaterial(self, material: "InstanceContainer") -> List[str]:
- results = [] # type: List[str]
-
- material_groups = self.getMaterialGroupListByGUID(material.getMetaDataEntry("GUID"))
- for material_group in material_groups: # type: ignore
- if material_group.name != material.getId():
- # If the material in the group is read only, put it at the front of the list (since that is the most
- # likely one to get a result)
- if material_group.is_read_only:
- results.insert(0, material_group.name)
- else:
- results.append(material_group.name)
-
- fallback = self.getFallbackMaterialIdByMaterialType(material.getMetaDataEntry("material"))
- if fallback is not None:
- results.append(fallback)
- return results
-
- #
- # Used by QualityManager. Built-in quality profiles may be based on generic material IDs such as "generic_pla".
- # For materials such as ultimaker_pla_orange, no quality profiles may be found, so we should fall back to use
- # the generic material IDs to search for qualities.
- #
- # An example would be, suppose we have machine with preferred material set to "filo3d_pla" (1.75mm), but its
- # extruders only use 2.85mm materials, then we won't be able to find the preferred material for this machine.
- # A fallback would be to fetch a generic material of the same type "PLA" as "filo3d_pla", and in this case it will
- # be "generic_pla". This function is intended to get a generic fallback material for the given material type.
- #
- # This function returns the generic root material ID for the given material type, where material types are "PLA",
- # "ABS", etc.
- #
- def getFallbackMaterialIdByMaterialType(self, material_type: str) -> Optional[str]:
- # For safety
- if material_type not in self._fallback_materials_map:
- Logger.log("w", "The material type [%s] does not have a fallback material" % material_type)
- return None
- fallback_material = self._fallback_materials_map[material_type]
- if fallback_material:
- return self.getRootMaterialIDWithoutDiameter(fallback_material["id"])
- else:
- return None
-
- ## Get default material for given global stack, extruder position and extruder nozzle name
- # you can provide the extruder_definition and then the position is ignored (useful when building up global stack in CuraStackBuilder)
- def getDefaultMaterial(self, global_stack: "GlobalStack", position: str, nozzle_name: Optional[str],
- extruder_definition: Optional["DefinitionContainer"] = None) -> Optional["MaterialNode"]:
- node = None
-
- buildplate_name = global_stack.getBuildplateName()
- machine_definition = global_stack.definition
-
- # The extruder-compatible material diameter in the extruder definition may not be the correct value because
- # the user can change it in the definition_changes container.
- if extruder_definition is None:
- extruder_stack_or_definition = global_stack.extruders[position]
- is_extruder_stack = True
- else:
- extruder_stack_or_definition = extruder_definition
- is_extruder_stack = False
-
- if extruder_stack_or_definition and parseBool(global_stack.getMetaDataEntry("has_materials", False)):
- if is_extruder_stack:
- material_diameter = extruder_stack_or_definition.getCompatibleMaterialDiameter()
- else:
- material_diameter = extruder_stack_or_definition.getProperty("material_diameter", "value")
-
- if isinstance(material_diameter, SettingFunction):
- material_diameter = material_diameter(global_stack)
- approximate_material_diameter = str(round(material_diameter))
- root_material_id = machine_definition.getMetaDataEntry("preferred_material")
- root_material_id = self.getRootMaterialIDForDiameter(root_material_id, approximate_material_diameter)
- node = self.getMaterialNode(machine_definition.getId(), nozzle_name, buildplate_name,
- material_diameter, root_material_id)
- return node
-
- def removeMaterialByRootId(self, root_material_id: str):
- material_group = self.getMaterialGroup(root_material_id)
- if not material_group:
- Logger.log("i", "Unable to remove the material with id %s, because it doesn't exist.", root_material_id)
- return
-
- nodes_to_remove = [material_group.root_material_node] + material_group.derived_material_node_list
- # Sort all nodes with respect to the container ID lengths in the ascending order so the base material container
- # will be the first one to be removed. We need to do this to ensure that all containers get loaded & deleted.
- nodes_to_remove = sorted(nodes_to_remove, key = lambda x: len(x.getMetaDataEntry("id", "")))
- # Try to load all containers first. If there is any faulty ones, they will be put into the faulty container
- # list, so removeContainer() can ignore those ones.
- for node in nodes_to_remove:
- container_id = node.getMetaDataEntry("id", "")
- results = self._container_registry.findContainers(id = container_id)
- if not results:
- self._container_registry.addWrongContainerId(container_id)
- for node in nodes_to_remove:
- self._container_registry.removeContainer(node.getMetaDataEntry("id", ""))
-
- #
- # Methods for GUI
- #
- @pyqtSlot("QVariant", result=bool)
- def canMaterialBeRemoved(self, material_node: "MaterialNode"):
- # Check if the material is active in any extruder train. In that case, the material shouldn't be removed!
- # In the future we might enable this again, but right now, it's causing a ton of issues if we do (since it
- # corrupts the configuration)
- root_material_id = material_node.getMetaDataEntry("base_file")
- material_group = self.getMaterialGroup(root_material_id)
- if not material_group:
- return False
-
- nodes_to_remove = [material_group.root_material_node] + material_group.derived_material_node_list
- ids_to_remove = [node.getMetaDataEntry("id", "") for node in nodes_to_remove]
-
- for extruder_stack in self._container_registry.findContainerStacks(type="extruder_train"):
- if extruder_stack.material.getId() in ids_to_remove:
- return False
- return True
-
- @pyqtSlot("QVariant", str)
- def setMaterialName(self, material_node: "MaterialNode", name: str) -> None:
- root_material_id = material_node.getMetaDataEntry("base_file")
- if root_material_id is None:
- return
- if self._container_registry.isReadOnly(root_material_id):
- Logger.log("w", "Cannot set name of read-only container %s.", root_material_id)
- return
-
- material_group = self.getMaterialGroup(root_material_id)
- if material_group:
- container = material_group.root_material_node.getContainer()
- if container:
- container.setName(name)
-
- #
- # Removes the given material.
- #
- @pyqtSlot("QVariant")
- def removeMaterial(self, material_node: "MaterialNode") -> None:
- root_material_id = material_node.getMetaDataEntry("base_file")
- if root_material_id is not None:
- self.removeMaterialByRootId(root_material_id)
-
- #
- # Creates a duplicate of a material, which has the same GUID and base_file metadata.
- # Returns the root material ID of the duplicated material if successful.
- #
- @pyqtSlot("QVariant", result = str)
- def duplicateMaterial(self, material_node: MaterialNode, new_base_id: Optional[str] = None, new_metadata: Dict[str, Any] = None) -> Optional[str]:
- root_material_id = cast(str, material_node.getMetaDataEntry("base_file", ""))
-
- material_group = self.getMaterialGroup(root_material_id)
- if not material_group:
- Logger.log("i", "Unable to duplicate the material with id %s, because it doesn't exist.", root_material_id)
- return None
-
- base_container = material_group.root_material_node.getContainer()
- if not base_container:
- return None
-
- # Ensure all settings are saved.
- self._application.saveSettings()
-
- # Create a new ID & container to hold the data.
- new_containers = []
- if new_base_id is None:
- new_base_id = self._container_registry.uniqueName(base_container.getId())
- new_base_container = copy.deepcopy(base_container)
- new_base_container.getMetaData()["id"] = new_base_id
- new_base_container.getMetaData()["base_file"] = new_base_id
- if new_metadata is not None:
- for key, value in new_metadata.items():
- new_base_container.getMetaData()[key] = value
- new_containers.append(new_base_container)
-
- # Clone all of them.
- for node in material_group.derived_material_node_list:
- container_to_copy = node.getContainer()
- if not container_to_copy:
- continue
- # Create unique IDs for every clone.
- new_id = new_base_id
- if container_to_copy.getMetaDataEntry("definition") != "fdmprinter":
- new_id += "_" + container_to_copy.getMetaDataEntry("definition")
- if container_to_copy.getMetaDataEntry("variant_name"):
- nozzle_name = container_to_copy.getMetaDataEntry("variant_name")
- new_id += "_" + nozzle_name.replace(" ", "_")
-
- new_container = copy.deepcopy(container_to_copy)
- new_container.getMetaData()["id"] = new_id
- new_container.getMetaData()["base_file"] = new_base_id
- if new_metadata is not None:
- for key, value in new_metadata.items():
- new_container.getMetaData()[key] = value
-
- new_containers.append(new_container)
-
- for container_to_add in new_containers:
- container_to_add.setDirty(True)
- self._container_registry.addContainer(container_to_add)
-
- # if the duplicated material was favorite then the new material should also be added to favorite.
- if root_material_id in self.getFavorites():
- self.addFavorite(new_base_id)
-
- return new_base_id
-
- #
- # Create a new material by cloning Generic PLA for the current material diameter and generate a new GUID.
- # Returns the ID of the newly created material.
- @pyqtSlot(result = str)
- def createMaterial(self) -> str:
- from UM.i18n import i18nCatalog
- catalog = i18nCatalog("cura")
- # Ensure all settings are saved.
- self._application.saveSettings()
-
- machine_manager = self._application.getMachineManager()
- extruder_stack = machine_manager.activeStack
-
- machine_definition = self._application.getGlobalContainerStack().definition
- root_material_id = machine_definition.getMetaDataEntry("preferred_material", default = "generic_pla")
-
- approximate_diameter = str(extruder_stack.approximateMaterialDiameter)
- root_material_id = self.getRootMaterialIDForDiameter(root_material_id, approximate_diameter)
- material_group = self.getMaterialGroup(root_material_id)
-
- if not material_group: # This should never happen
- Logger.log("w", "Cannot get the material group of %s.", root_material_id)
- return ""
-
- # Create a new ID & container to hold the data.
- new_id = self._container_registry.uniqueName("custom_material")
- new_metadata = {"name": catalog.i18nc("@label", "Custom Material"),
- "brand": catalog.i18nc("@label", "Custom"),
- "GUID": str(uuid.uuid4()),
- }
-
- self.duplicateMaterial(material_group.root_material_node,
- new_base_id = new_id,
- new_metadata = new_metadata)
- return new_id
-
- @pyqtSlot(str)
- def addFavorite(self, root_material_id: str) -> None:
- self._favorites.add(root_material_id)
- self.materialsUpdated.emit()
-
- # Ensure all settings are saved.
- self._application.getPreferences().setValue("cura/favorite_materials", ";".join(list(self._favorites)))
- self._application.saveSettings()
-
- @pyqtSlot(str)
- def removeFavorite(self, root_material_id: str) -> None:
- try:
- self._favorites.remove(root_material_id)
- except KeyError:
- Logger.log("w", "Could not delete material %s from favorites as it was already deleted", root_material_id)
- return
- self.materialsUpdated.emit()
-
- # Ensure all settings are saved.
- self._application.getPreferences().setValue("cura/favorite_materials", ";".join(list(self._favorites)))
- self._application.saveSettings()
-
- @pyqtSlot()
- def getFavorites(self):
- return self._favorites
diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py
index a4dcb0564f..fe20af2cd5 100644
--- a/cura/Machines/MaterialNode.py
+++ b/cura/Machines/MaterialNode.py
@@ -1,25 +1,136 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional, Dict, Any
-from collections import OrderedDict
-from .ContainerNode import ContainerNode
+from typing import Any, Optional, TYPE_CHECKING
+from UM.Logger import Logger
+from UM.Settings.ContainerRegistry import ContainerRegistry
+from UM.Settings.Interfaces import ContainerInterface
+from UM.Signal import Signal
+from cura.Machines.ContainerNode import ContainerNode
+from cura.Machines.QualityNode import QualityNode
+import UM.FlameProfiler
+if TYPE_CHECKING:
+ from typing import Dict
+ from cura.Machines.VariantNode import VariantNode
+
+## Represents a material in the container tree.
#
-# A MaterialNode is a node in the material lookup tree/map/table. It contains 2 (extra) fields:
-# - material_map: a one-to-one map of "material_root_id" to material_node.
-# - children_map: the key-value map for child nodes of this node. This is used in a lookup tree.
-#
-#
+# Its subcontainers are quality profiles.
class MaterialNode(ContainerNode):
- __slots__ = ("material_map", "children_map")
+ def __init__(self, container_id: str, variant: "VariantNode") -> None:
+ super().__init__(container_id)
+ self.variant = variant
+ self.qualities = {} # type: Dict[str, QualityNode] # Mapping container IDs to quality profiles.
+ self.materialChanged = Signal() # Triggered when the material is removed or its metadata is updated.
- def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None:
- super().__init__(metadata = metadata)
- self.material_map = {} # type: Dict[str, MaterialNode] # material_root_id -> material_node
+ container_registry = ContainerRegistry.getInstance()
+ my_metadata = container_registry.findContainersMetadata(id = container_id)[0]
+ self.base_file = my_metadata["base_file"]
+ self.material_type = my_metadata["material"]
+ self.guid = my_metadata["GUID"]
+ self._loadAll()
+ container_registry.containerRemoved.connect(self._onRemoved)
+ container_registry.containerMetaDataChanged.connect(self._onMetadataChanged)
- # We overide this as we want to indicate that MaterialNodes can only contain other material nodes.
- self.children_map = OrderedDict() # type: OrderedDict[str, "MaterialNode"]
+ ## Finds the preferred quality for this printer with this material and this
+ # variant loaded.
+ #
+ # If the preferred quality is not available, an arbitrary quality is
+ # returned. If there is a configuration mistake (like a typo in the
+ # preferred quality) this returns a random available quality. If there are
+ # no available qualities, this will return the empty quality node.
+ # \return The node for the preferred quality, or any arbitrary quality if
+ # there is no match.
+ def preferredQuality(self) -> QualityNode:
+ for quality_id, quality_node in self.qualities.items():
+ if self.variant.machine.preferred_quality_type == quality_node.quality_type:
+ return quality_node
+ fallback = next(iter(self.qualities.values())) # Should only happen with empty quality node.
+ Logger.log("w", "Could not find preferred quality type {preferred_quality_type} for material {material_id} and variant {variant_id}, falling back to {fallback}.".format(
+ preferred_quality_type = self.variant.machine.preferred_quality_type,
+ material_id = self.container_id,
+ variant_id = self.variant.container_id,
+ fallback = fallback.container_id
+ ))
+ return fallback
- def getChildNode(self, child_key: str) -> Optional["MaterialNode"]:
- return self.children_map.get(child_key)
\ No newline at end of file
+ @UM.FlameProfiler.profile
+ def _loadAll(self) -> None:
+ container_registry = ContainerRegistry.getInstance()
+ # Find all quality profiles that fit on this material.
+ if not self.variant.machine.has_machine_quality: # Need to find the global qualities.
+ qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = "fdmprinter")
+ elif not self.variant.machine.has_materials:
+ qualities = container_registry.findInstanceContainersMetadata(type="quality", definition=self.variant.machine.quality_definition)
+ else:
+ if self.variant.machine.has_variants:
+ # Need to find the qualities that specify a material profile with the same material type.
+ qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name, material = self.container_id) # First try by exact material ID.
+ else:
+ qualities = container_registry.findInstanceContainersMetadata(type="quality", definition=self.variant.machine.quality_definition, material=self.container_id)
+ if not qualities:
+ my_material_type = self.material_type
+ if self.variant.machine.has_variants:
+ qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name)
+ else:
+ qualities_any_material = container_registry.findInstanceContainersMetadata(type="quality", definition = self.variant.machine.quality_definition)
+ for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type):
+ qualities.extend((quality for quality in qualities_any_material if quality.get("material") == material_metadata["id"]))
+
+ if not qualities: # No quality profiles found. Go by GUID then.
+ my_guid = self.guid
+ for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", guid = my_guid):
+ qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["id"]))
+
+ if not qualities:
+ # There are still some machines that should use global profiles in the extruder, so do that now.
+ # These are mostly older machines that haven't received updates (so single extruder machines without specific qualities
+ # but that do have materials and profiles specific to that machine)
+ qualities.extend([quality for quality in qualities_any_material if quality.get("global_quality", "False") != "False"])
+
+ for quality in qualities:
+ quality_id = quality["id"]
+ if quality_id not in self.qualities:
+ self.qualities[quality_id] = QualityNode(quality_id, parent = self)
+ if not self.qualities:
+ self.qualities["empty_quality"] = QualityNode("empty_quality", parent = self)
+
+ ## Triggered when any container is removed, but only handles it when the
+ # container is removed that this node represents.
+ # \param container The container that was allegedly removed.
+ def _onRemoved(self, container: ContainerInterface) -> None:
+ if container.getId() == self.container_id:
+ # Remove myself from my parent.
+ if self.base_file in self.variant.materials:
+ del self.variant.materials[self.base_file]
+ if not self.variant.materials:
+ self.variant.materials["empty_material"] = MaterialNode("empty_material", variant = self.variant)
+ self.materialChanged.emit(self)
+
+ ## Triggered when any metadata changed in any container, but only handles
+ # it when the metadata of this node is changed.
+ # \param container The container whose metadata changed.
+ # \param kwargs Key-word arguments provided when changing the metadata.
+ # These are ignored. As far as I know they are never provided to this
+ # call.
+ def _onMetadataChanged(self, container: ContainerInterface, **kwargs: Any) -> None:
+ if container.getId() != self.container_id:
+ return
+
+ new_metadata = container.getMetaData()
+ old_base_file = self.base_file
+ if new_metadata["base_file"] != old_base_file:
+ self.base_file = new_metadata["base_file"]
+ if old_base_file in self.variant.materials: # Move in parent node.
+ del self.variant.materials[old_base_file]
+ self.variant.materials[self.base_file] = self
+
+ old_material_type = self.material_type
+ self.material_type = new_metadata["material"]
+ old_guid = self.guid
+ self.guid = new_metadata["GUID"]
+ if self.base_file != old_base_file or self.material_type != old_material_type or self.guid != old_guid: # List of quality profiles could've changed.
+ self.qualities = {}
+ self._loadAll() # Re-load the quality profiles for this node.
+ self.materialChanged.emit(self)
diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py
index 2c9c7607ad..db660704b5 100644
--- a/cura/Machines/Models/BaseMaterialsModel.py
+++ b/cura/Machines/Models/BaseMaterialsModel.py
@@ -1,18 +1,22 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional, Dict, Set
-from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty
+from typing import Dict, Set
+
+from PyQt5.QtCore import Qt, QTimer, pyqtSignal, pyqtProperty
+
from UM.Qt.ListModel import ListModel
+from UM.Logger import Logger
+import cura.CuraApplication # Imported like this to prevent a circular reference.
+from cura.Machines.ContainerTree import ContainerTree
+from cura.Machines.MaterialNode import MaterialNode
+from cura.Settings.CuraContainerRegistry import CuraContainerRegistry
## This is the base model class for GenericMaterialsModel and MaterialBrandsModel.
# Those 2 models are used by the material drop down menu to show generic materials and branded materials separately.
# The extruder position defined here is being used to bound a menu to the correct extruder. This is used in the top
# bar menu "Settings" -> "Extruder nr" -> "Material" -> this menu
-from cura.Machines.MaterialNode import MaterialNode
-
-
class BaseMaterialsModel(ListModel):
extruderPositionChanged = pyqtSignal()
@@ -24,19 +28,36 @@ class BaseMaterialsModel(ListModel):
self._application = CuraApplication.getInstance()
+ self._available_materials = {} # type: Dict[str, MaterialNode]
+ self._favorite_ids = set() # type: Set[str]
+
# Make these managers available to all material models
self._container_registry = self._application.getInstance().getContainerRegistry()
self._machine_manager = self._application.getMachineManager()
- self._material_manager = self._application.getMaterialManager()
+
+ self._extruder_position = 0
+ self._extruder_stack = None
+ self._enabled = True
+
+ # CURA-6904
+ # Updating the material model requires information from material nodes and containers. We use a timer here to
+ # make sure that an update function call will not be directly invoked by an event. Because the triggered event
+ # can be caused in the middle of a XMLMaterial loading, and the material container we try to find may not be
+ # in the system yet. This will cause an infinite recursion of (1) trying to load a material, (2) trying to
+ # update the material model, (3) cannot find the material container, load it, (4) repeat #1.
+ self._update_timer = QTimer()
+ self._update_timer.setInterval(100)
+ self._update_timer.setSingleShot(True)
+ self._update_timer.timeout.connect(self._update)
# Update the stack and the model data when the machine changes
self._machine_manager.globalContainerChanged.connect(self._updateExtruderStack)
+ self._updateExtruderStack()
- # Update this model when switching machines
- self._machine_manager.activeStackChanged.connect(self._update)
-
- # Update this model when list of materials changes
- self._material_manager.materialsUpdated.connect(self._update)
+ # Update this model when switching machines or tabs, when adding materials or changing their metadata.
+ self._machine_manager.activeStackChanged.connect(self._onChanged)
+ ContainerTree.getInstance().materialsChanged.connect(self._materialsListChanged)
+ self._application.getMaterialManagementModel().favoritesChanged.connect(self._onChanged)
self.addRoleName(Qt.UserRole + 1, "root_material_id")
self.addRoleName(Qt.UserRole + 2, "id")
@@ -55,12 +76,8 @@ class BaseMaterialsModel(ListModel):
self.addRoleName(Qt.UserRole + 15, "container_node")
self.addRoleName(Qt.UserRole + 16, "is_favorite")
- self._extruder_position = 0
- self._extruder_stack = None
-
- self._available_materials = None # type: Optional[Dict[str, MaterialNode]]
- self._favorite_ids = set() # type: Set[str]
- self._enabled = True
+ def _onChanged(self) -> None:
+ self._update_timer.start()
def _updateExtruderStack(self):
global_stack = self._machine_manager.activeMachine
@@ -68,8 +85,8 @@ class BaseMaterialsModel(ListModel):
return
if self._extruder_stack is not None:
- self._extruder_stack.pyqtContainersChanged.disconnect(self._update)
- self._extruder_stack.approximateMaterialDiameterChanged.disconnect(self._update)
+ self._extruder_stack.pyqtContainersChanged.disconnect(self._onChanged)
+ self._extruder_stack.approximateMaterialDiameterChanged.disconnect(self._onChanged)
try:
self._extruder_stack = global_stack.extruderList[self._extruder_position]
@@ -77,10 +94,10 @@ class BaseMaterialsModel(ListModel):
self._extruder_stack = None
if self._extruder_stack is not None:
- self._extruder_stack.pyqtContainersChanged.connect(self._update)
- self._extruder_stack.approximateMaterialDiameterChanged.connect(self._update)
+ self._extruder_stack.pyqtContainersChanged.connect(self._onChanged)
+ self._extruder_stack.approximateMaterialDiameterChanged.connect(self._onChanged)
# Force update the model when the extruder stack changes
- self._update()
+ self._onChanged()
def setExtruderPosition(self, position: int):
if self._extruder_stack is None or self._extruder_position != position:
@@ -97,34 +114,65 @@ class BaseMaterialsModel(ListModel):
self._enabled = enabled
if self._enabled:
# ensure the data is there again.
- self._update()
+ self._onChanged()
self.enabledChanged.emit()
- @pyqtProperty(bool, fset=setEnabled, notify=enabledChanged)
+ @pyqtProperty(bool, fset = setEnabled, notify = enabledChanged)
def enabled(self):
return self._enabled
- ## This is an abstract method that needs to be implemented by the specific
- # models themselves.
+ ## Triggered when a list of materials changed somewhere in the container
+ # tree. This change may trigger an _update() call when the materials
+ # changed for the configuration that this model is looking for.
+ def _materialsListChanged(self, material: MaterialNode) -> None:
+ if self._extruder_stack is None:
+ return
+ if material.variant.container_id != self._extruder_stack.variant.getId():
+ return
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if not global_stack:
+ return
+ if material.variant.machine.container_id != global_stack.definition.getId():
+ return
+ self._onChanged()
+
+ ## Triggered when the list of favorite materials is changed.
+ def _favoritesChanged(self, material_base_file: str) -> None:
+ if material_base_file in self._available_materials:
+ self._onChanged()
+
+ ## This is an abstract method that needs to be implemented by the specific
+ # models themselves.
def _update(self):
- pass
+ self._favorite_ids = set(cura.CuraApplication.CuraApplication.getInstance().getPreferences().getValue("cura/favorite_materials").split(";"))
+
+ # Update the available materials (ContainerNode) for the current active machine and extruder setup.
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if not global_stack.hasMaterials:
+ return # There are no materials for this machine, so nothing to do.
+ extruder_stack = global_stack.extruders.get(str(self._extruder_position))
+ if not extruder_stack:
+ return
+ nozzle_name = extruder_stack.variant.getName()
+ machine_node = ContainerTree.getInstance().machines[global_stack.definition.getId()]
+ if nozzle_name not in machine_node.variants:
+ Logger.log("w", "Unable to find variant %s in container tree", nozzle_name)
+ self._available_materials = {}
+ return
+ materials = machine_node.variants[nozzle_name].materials
+ approximate_material_diameter = extruder_stack.getApproximateMaterialDiameter()
+ self._available_materials = {key: material for key, material in materials.items() if float(material.getMetaDataEntry("approximate_diameter", -1)) == approximate_material_diameter}
## This method is used by all material models in the beginning of the
# _update() method in order to prevent errors. It's the same in all models
# so it's placed here for easy access.
def _canUpdate(self):
global_stack = self._machine_manager.activeMachine
-
if global_stack is None or not self._enabled:
return False
- try:
- extruder_stack = global_stack.extruderList[self._extruder_position]
- except IndexError:
- return False
-
- self._available_materials = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, extruder_stack)
- if self._available_materials is None:
+ extruder_position = str(self._extruder_position)
+ if extruder_position not in global_stack.extruders:
return False
return True
@@ -132,7 +180,10 @@ class BaseMaterialsModel(ListModel):
## This is another convenience function which is shared by all material
# models so it's put here to avoid having so much duplicated code.
def _createMaterialItem(self, root_material_id, container_node):
- metadata = container_node.getMetadata()
+ metadata_list = CuraContainerRegistry.getInstance().findContainersMetadata(id = container_node.container_id)
+ if not metadata_list:
+ return None
+ metadata = metadata_list[0]
item = {
"root_material_id": root_material_id,
"id": metadata["id"],
@@ -153,4 +204,3 @@ class BaseMaterialsModel(ListModel):
"is_favorite": root_material_id in self._favorite_ids
}
return item
-
diff --git a/cura/Machines/Models/BuildPlateModel.py b/cura/Machines/Models/BuildPlateModel.py
index 82b9db4d64..3697dd2762 100644
--- a/cura/Machines/Models/BuildPlateModel.py
+++ b/cura/Machines/Models/BuildPlateModel.py
@@ -1,14 +1,9 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from PyQt5.QtCore import Qt
-
-from UM.Application import Application
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
-from UM.Util import parseBool
-
-from cura.Machines.VariantType import VariantType
class BuildPlateModel(ListModel):
@@ -21,31 +16,9 @@ class BuildPlateModel(ListModel):
self.addRoleName(self.NameRole, "name")
self.addRoleName(self.ContainerNodeRole, "container_node")
- self._application = Application.getInstance()
- self._variant_manager = self._application._variant_manager
- self._machine_manager = self._application.getMachineManager()
-
- self._machine_manager.globalContainerChanged.connect(self._update)
-
self._update()
def _update(self):
Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__))
- global_stack = self._machine_manager._global_container_stack
- if not global_stack:
- self.setItems([])
- return
-
- has_variants = parseBool(global_stack.getMetaDataEntry("has_variant_buildplates", False))
- if not has_variants:
- self.setItems([])
- return
-
- variant_dict = self._variant_manager.getVariantNodes(global_stack, variant_type = VariantType.BUILD_PLATE)
-
- item_list = []
- for name, variant_node in variant_dict.items():
- item = {"name": name,
- "container_node": variant_node}
- item_list.append(item)
- self.setItems(item_list)
+ self.setItems([])
+ return
diff --git a/cura/Machines/Models/CustomQualityProfilesDropDownMenuModel.py b/cura/Machines/Models/CustomQualityProfilesDropDownMenuModel.py
index dcade8cb0d..1ab7e21700 100644
--- a/cura/Machines/Models/CustomQualityProfilesDropDownMenuModel.py
+++ b/cura/Machines/Models/CustomQualityProfilesDropDownMenuModel.py
@@ -1,31 +1,48 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+from typing import Optional, TYPE_CHECKING
+
from UM.Logger import Logger
+import cura.CuraApplication # Imported this way to prevent circular references.
+from cura.Machines.ContainerTree import ContainerTree
from cura.Machines.Models.QualityProfilesDropDownMenuModel import QualityProfilesDropDownMenuModel
+if TYPE_CHECKING:
+ from PyQt5.QtCore import QObject
+ from UM.Settings.Interfaces import ContainerInterface
-#
-# This model is used for the custom profile items in the profile drop down menu.
-#
+
+## This model is used for the custom profile items in the profile drop down
+# menu.
class CustomQualityProfilesDropDownMenuModel(QualityProfilesDropDownMenuModel):
- def _update(self):
+ def __init__(self, parent: Optional["QObject"] = None) -> None:
+ super().__init__(parent)
+
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
+ container_registry.containerAdded.connect(self._qualityChangesListChanged)
+ container_registry.containerRemoved.connect(self._qualityChangesListChanged)
+ container_registry.containerMetaDataChanged.connect(self._qualityChangesListChanged)
+
+ def _qualityChangesListChanged(self, container: "ContainerInterface") -> None:
+ if container.getMetaDataEntry("type") == "quality_changes":
+ self._update()
+
+ def _update(self) -> None:
Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__))
- active_global_stack = self._machine_manager.activeMachine
+ active_global_stack = cura.CuraApplication.CuraApplication.getInstance().getMachineManager().activeMachine
if active_global_stack is None:
self.setItems([])
Logger.log("d", "No active GlobalStack, set %s as empty.", self.__class__.__name__)
return
- quality_changes_group_dict = self._quality_manager.getQualityChangesGroups(active_global_stack)
+ quality_changes_list = ContainerTree.getInstance().getCurrentQualityChangesGroups()
item_list = []
- for key in sorted(quality_changes_group_dict, key = lambda name: name.upper()):
- quality_changes_group = quality_changes_group_dict[key]
-
+ for quality_changes_group in sorted(quality_changes_list, key = lambda qgc: qgc.name.lower()):
item = {"name": quality_changes_group.name,
"layer_height": "",
"layer_height_without_unit": "",
diff --git a/cura/Machines/Models/DiscoveredPrintersModel.py b/cura/Machines/Models/DiscoveredPrintersModel.py
index a1b68ee1ae..c662334470 100644
--- a/cura/Machines/Models/DiscoveredPrintersModel.py
+++ b/cura/Machines/Models/DiscoveredPrintersModel.py
@@ -11,7 +11,6 @@ from UM.Util import parseBool
from UM.OutputDevice.OutputDeviceManager import ManualDeviceAdditionAttempt
if TYPE_CHECKING:
- from PyQt5.QtCore import QObject
from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin
from cura.CuraApplication import CuraApplication
from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice
diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py
index 98a2a01597..6b8f0e8e56 100644
--- a/cura/Machines/Models/FavoriteMaterialsModel.py
+++ b/cura/Machines/Models/FavoriteMaterialsModel.py
@@ -1,28 +1,33 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel
+import cura.CuraApplication # To listen to changes to the preferences.
## Model that shows the list of favorite materials.
class FavoriteMaterialsModel(BaseMaterialsModel):
def __init__(self, parent = None):
super().__init__(parent)
- self._update()
+ cura.CuraApplication.CuraApplication.getInstance().getPreferences().preferenceChanged.connect(self._onFavoritesChanged)
+ self._onChanged()
+
+ ## Triggered when any preference changes, but only handles it when the list
+ # of favourites is changed.
+ def _onFavoritesChanged(self, preference_key: str) -> None:
+ if preference_key != "cura/favorite_materials":
+ return
+ self._onChanged()
def _update(self):
if not self._canUpdate():
return
-
- # Get updated list of favorites
- self._favorite_ids = self._material_manager.getFavorites()
+ super()._update()
item_list = []
for root_material_id, container_node in self._available_materials.items():
- metadata = container_node.getMetadata()
-
# Do not include the materials from a to-be-removed package
- if bool(metadata.get("removed", False)):
+ if bool(container_node.getMetaDataEntry("removed", False)):
continue
# Only add results for favorite materials
@@ -30,7 +35,8 @@ class FavoriteMaterialsModel(BaseMaterialsModel):
continue
item = self._createMaterialItem(root_material_id, container_node)
- item_list.append(item)
+ if item:
+ item_list.append(item)
# Sort the item list alphabetically by name
item_list = sorted(item_list, key = lambda d: d["brand"].upper())
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/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py
index e81a73de24..9ed1632b87 100644
--- a/cura/Machines/Models/GenericMaterialsModel.py
+++ b/cura/Machines/Models/GenericMaterialsModel.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.
from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel
@@ -7,30 +7,27 @@ class GenericMaterialsModel(BaseMaterialsModel):
def __init__(self, parent = None):
super().__init__(parent)
- self._update()
+ self._onChanged()
def _update(self):
if not self._canUpdate():
return
-
- # Get updated list of favorites
- self._favorite_ids = self._material_manager.getFavorites()
+ super()._update()
item_list = []
for root_material_id, container_node in self._available_materials.items():
- metadata = container_node.getMetadata()
-
# Do not include the materials from a to-be-removed package
- if bool(metadata.get("removed", False)):
+ if bool(container_node.getMetaDataEntry("removed", False)):
continue
# Only add results for generic materials
- if metadata["brand"].lower() != "generic":
+ if container_node.getMetaDataEntry("brand", "unknown").lower() != "generic":
continue
item = self._createMaterialItem(root_material_id, container_node)
- item_list.append(item)
+ if item:
+ item_list.append(item)
# Sort the item list alphabetically by name
item_list = sorted(item_list, key = lambda d: d["name"].upper())
diff --git a/cura/Machines/Models/IntentCategoryModel.py b/cura/Machines/Models/IntentCategoryModel.py
new file mode 100644
index 0000000000..202d79bb15
--- /dev/null
+++ b/cura/Machines/Models/IntentCategoryModel.py
@@ -0,0 +1,118 @@
+#Copyright (c) 2019 Ultimaker B.V.
+#Cura is released under the terms of the LGPLv3 or higher.
+
+import collections
+from PyQt5.QtCore import Qt, QTimer
+from typing import TYPE_CHECKING, Optional, Dict
+from cura.Machines.Models.IntentTranslations import intent_translations
+
+from cura.Machines.Models.IntentModel import IntentModel
+from cura.Settings.IntentManager import IntentManager
+from UM.Qt.ListModel import ListModel
+from UM.Settings.ContainerRegistry import ContainerRegistry #To update the list if anything changes.
+from PyQt5.QtCore import pyqtProperty, pyqtSignal
+import cura.CuraApplication
+if TYPE_CHECKING:
+ from UM.Settings.ContainerRegistry import ContainerInterface
+
+from UM.i18n import i18nCatalog
+catalog = i18nCatalog("cura")
+
+
+## Lists the intent categories that are available for the current printer
+# configuration.
+class IntentCategoryModel(ListModel):
+ NameRole = Qt.UserRole + 1
+ IntentCategoryRole = Qt.UserRole + 2
+ WeightRole = Qt.UserRole + 3
+ QualitiesRole = Qt.UserRole + 4
+ DescriptionRole = Qt.UserRole + 5
+
+ modelUpdated = pyqtSignal()
+
+ _translations = collections.OrderedDict() # type: "collections.OrderedDict[str,Dict[str,Optional[str]]]"
+
+ # Translations to user-visible string. Ordered by weight.
+ # TODO: Create a solution for this name and weight to be used dynamically.
+ @classmethod
+ def _get_translations(cls):
+ if len(cls._translations) == 0:
+ cls._translations["default"] = {
+ "name": catalog.i18nc("@label", "Default")
+ }
+ cls._translations["visual"] = {
+ "name": catalog.i18nc("@label", "Visual"),
+ "description": catalog.i18nc("@text", "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality.")
+ }
+ cls._translations["engineering"] = {
+ "name": catalog.i18nc("@label", "Engineering"),
+ "description": catalog.i18nc("@text", "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances.")
+ }
+ cls._translations["quick"] = {
+ "name": catalog.i18nc("@label", "Draft"),
+ "description": catalog.i18nc("@text", "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction.")
+ }
+ return cls._translations
+
+ ## Creates a new model for a certain intent category.
+ # \param The category to list the intent profiles for.
+ def __init__(self, intent_category: str) -> None:
+ super().__init__()
+ self._intent_category = intent_category
+
+ self.addRoleName(self.NameRole, "name")
+ self.addRoleName(self.IntentCategoryRole, "intent_category")
+ self.addRoleName(self.WeightRole, "weight")
+ self.addRoleName(self.QualitiesRole, "qualities")
+ self.addRoleName(self.DescriptionRole, "description")
+
+ application = cura.CuraApplication.CuraApplication.getInstance()
+
+ ContainerRegistry.getInstance().containerAdded.connect(self._onContainerChange)
+ ContainerRegistry.getInstance().containerRemoved.connect(self._onContainerChange)
+ machine_manager = cura.CuraApplication.CuraApplication.getInstance().getMachineManager()
+ machine_manager.activeMaterialChanged.connect(self.update)
+ machine_manager.activeVariantChanged.connect(self.update)
+ machine_manager.extruderChanged.connect(self.update)
+
+ 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.
+ def _onContainerChange(self, container: "ContainerInterface") -> None:
+ if container.getMetaDataEntry("type") == "intent":
+ self.update()
+
+ def update(self):
+ self._update_timer.start()
+
+ ## Updates the list of intents.
+ def _update(self) -> None:
+ available_categories = IntentManager.getInstance().currentAvailableIntentCategories()
+ result = []
+ for category in available_categories:
+ qualities = IntentModel()
+ qualities.setIntentCategory(category)
+ result.append({
+ "name": IntentCategoryModel.translation(category, "name", catalog.i18nc("@label", "Unknown")),
+ "description": IntentCategoryModel.translation(category, "description", None),
+ "intent_category": category,
+ "weight": list(IntentCategoryModel._get_translations().keys()).index(category),
+ "qualities": qualities
+ })
+ result.sort(key = lambda k: k["weight"])
+ self.setItems(result)
+
+ ## Get a display value for a category.
+ ## for categories and keys
+ @staticmethod
+ def translation(category: str, key: str, default: Optional[str] = None):
+ display_strings = IntentCategoryModel._get_translations().get(category, {})
+ return display_strings.get(key, default)
diff --git a/cura/Machines/Models/IntentModel.py b/cura/Machines/Models/IntentModel.py
new file mode 100644
index 0000000000..986f28a826
--- /dev/null
+++ b/cura/Machines/Models/IntentModel.py
@@ -0,0 +1,135 @@
+# Copyright (c) 2019 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+from typing import Optional, Dict, Any, Set, List
+
+from PyQt5.QtCore import Qt, QObject, pyqtProperty, pyqtSignal
+
+import cura.CuraApplication
+from UM.Qt.ListModel import ListModel
+from UM.Settings.ContainerRegistry import ContainerRegistry
+from UM.Logger import Logger
+from cura.Machines.ContainerTree import ContainerTree
+from cura.Machines.MaterialNode import MaterialNode
+from cura.Machines.Models.MachineModelUtils import fetchLayerHeight
+from cura.Machines.QualityGroup import QualityGroup
+
+
+class IntentModel(ListModel):
+ NameRole = Qt.UserRole + 1
+ QualityTypeRole = Qt.UserRole + 2
+ LayerHeightRole = Qt.UserRole + 3
+ AvailableRole = Qt.UserRole + 4
+ IntentRole = Qt.UserRole + 5
+
+ def __init__(self, parent: Optional[QObject] = None) -> None:
+ super().__init__(parent)
+
+ self.addRoleName(self.NameRole, "name")
+ self.addRoleName(self.QualityTypeRole, "quality_type")
+ self.addRoleName(self.LayerHeightRole, "layer_height")
+ self.addRoleName(self.AvailableRole, "available")
+ self.addRoleName(self.IntentRole, "intent_category")
+
+ self._intent_category = "engineering"
+
+ machine_manager = cura.CuraApplication.CuraApplication.getInstance().getMachineManager()
+ machine_manager.globalContainerChanged.connect(self._update)
+ machine_manager.extruderChanged.connect(self._update) # We also need to update if an extruder gets disabled
+ ContainerRegistry.getInstance().containerAdded.connect(self._onChanged)
+ ContainerRegistry.getInstance().containerRemoved.connect(self._onChanged)
+ self._layer_height_unit = "" # This is cached
+ self._update()
+
+ intentCategoryChanged = pyqtSignal()
+
+ def setIntentCategory(self, new_category: str) -> None:
+ if self._intent_category != new_category:
+ self._intent_category = new_category
+ self.intentCategoryChanged.emit()
+ self._update()
+
+ @pyqtProperty(str, fset = setIntentCategory, notify = intentCategoryChanged)
+ def intentCategory(self) -> str:
+ return self._intent_category
+
+ def _onChanged(self, container):
+ if container.getMetaDataEntry("type") == "intent":
+ self._update()
+
+ def _update(self) -> None:
+ new_items = [] # type: List[Dict[str, Any]]
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if not global_stack:
+ self.setItems(new_items)
+ return
+ quality_groups = ContainerTree.getInstance().getCurrentQualityGroups()
+
+ material_nodes = self._getActiveMaterials()
+
+ added_quality_type_set = set() # type: Set[str]
+ for material_node in material_nodes:
+ intents = self._getIntentsForMaterial(material_node, quality_groups)
+ for intent in intents:
+ if intent["quality_type"] not in added_quality_type_set:
+ new_items.append(intent)
+ added_quality_type_set.add(intent["quality_type"])
+
+ # Now that we added all intents that we found something for, ensure that we set add ticks (and layer_heights)
+ # for all groups that we don't have anything for (and set it to not available)
+ for quality_type, quality_group in quality_groups.items():
+ # Add the intents that are of the correct category
+ if quality_type not in added_quality_type_set:
+ layer_height = fetchLayerHeight(quality_group)
+ new_items.append({"name": "Unavailable",
+ "quality_type": quality_type,
+ "layer_height": layer_height,
+ "intent_category": self._intent_category,
+ "available": False})
+ added_quality_type_set.add(quality_type)
+
+ new_items = sorted(new_items, key = lambda x: x["layer_height"])
+ self.setItems(new_items)
+
+ ## Get the active materials for all extruders. No duplicates will be returned
+ def _getActiveMaterials(self) -> Set["MaterialNode"]:
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if global_stack is None:
+ return set()
+
+ container_tree = ContainerTree.getInstance()
+ machine_node = container_tree.machines[global_stack.definition.getId()]
+ nodes = set() # type: Set[MaterialNode]
+
+ for extruder in global_stack.extruderList:
+ active_variant_name = extruder.variant.getMetaDataEntry("name")
+ if active_variant_name not in machine_node.variants:
+ Logger.log("w", "Could not find the variant %s", active_variant_name)
+ continue
+ active_variant_node = machine_node.variants[active_variant_name]
+ active_material_node = active_variant_node.materials[extruder.material.getMetaDataEntry("base_file")]
+ nodes.add(active_material_node)
+
+ return nodes
+
+ def _getIntentsForMaterial(self, active_material_node: "MaterialNode", quality_groups: Dict[str, "QualityGroup"]) -> List[Dict[str, Any]]:
+ extruder_intents = [] # type: List[Dict[str, Any]]
+
+ for quality_id, quality_node in active_material_node.qualities.items():
+ if quality_node.quality_type not in quality_groups: # Don't add the empty quality type (or anything else that would crash, defensively).
+ continue
+ quality_group = quality_groups[quality_node.quality_type]
+ layer_height = fetchLayerHeight(quality_group)
+
+ for intent_id, intent_node in quality_node.intents.items():
+ if intent_node.intent_category != self._intent_category:
+ continue
+ extruder_intents.append({"name": quality_group.name,
+ "quality_type": quality_group.quality_type,
+ "layer_height": layer_height,
+ "available": quality_group.is_available,
+ "intent_category": self._intent_category
+ })
+ return extruder_intents
+
+ def __repr__(self):
+ return str(self.items)
diff --git a/cura/Machines/Models/IntentTranslations.py b/cura/Machines/Models/IntentTranslations.py
new file mode 100644
index 0000000000..050fb1de56
--- /dev/null
+++ b/cura/Machines/Models/IntentTranslations.py
@@ -0,0 +1,24 @@
+import collections
+from typing import Dict, Optional
+
+from UM.i18n import i18nCatalog
+from typing import Dict, Optional
+catalog = i18nCatalog("cura")
+
+
+intent_translations = collections.OrderedDict() # type: collections.OrderedDict[str, Dict[str, Optional[str]]]
+intent_translations["default"] = {
+ "name": catalog.i18nc("@label", "Default")
+}
+intent_translations["visual"] = {
+ "name": catalog.i18nc("@label", "Visual"),
+ "description": catalog.i18nc("@text", "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality.")
+}
+intent_translations["engineering"] = {
+ "name": catalog.i18nc("@label", "Engineering"),
+ "description": catalog.i18nc("@text", "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances.")
+}
+intent_translations["quick"] = {
+ "name": catalog.i18nc("@label", "Draft"),
+ "description": catalog.i18nc("@text", "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction.")
+}
diff --git a/cura/Machines/Models/MachineModelUtils.py b/cura/Machines/Models/MachineModelUtils.py
new file mode 100644
index 0000000000..a23b1ff3a5
--- /dev/null
+++ b/cura/Machines/Models/MachineModelUtils.py
@@ -0,0 +1,37 @@
+# Copyright (c) 2019 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from typing import TYPE_CHECKING
+
+from UM.Settings.SettingFunction import SettingFunction
+
+if TYPE_CHECKING:
+ from cura.Machines.QualityGroup import QualityGroup
+
+layer_height_unit = ""
+
+
+def fetchLayerHeight(quality_group: "QualityGroup") -> float:
+ from cura.CuraApplication import CuraApplication
+ global_stack = CuraApplication.getInstance().getMachineManager().activeMachine
+
+ default_layer_height = global_stack.definition.getProperty("layer_height", "value")
+
+ # Get layer_height from the quality profile for the GlobalStack
+ if quality_group.node_for_global is None:
+ return float(default_layer_height)
+ container = quality_group.node_for_global.container
+
+ layer_height = default_layer_height
+ if container and container.hasProperty("layer_height", "value"):
+ layer_height = container.getProperty("layer_height", "value")
+ else:
+ # Look for layer_height in the GlobalStack from material -> definition
+ container = global_stack.definition
+ if container and container.hasProperty("layer_height", "value"):
+ layer_height = container.getProperty("layer_height", "value")
+
+ if isinstance(layer_height, SettingFunction):
+ layer_height = layer_height(global_stack)
+
+ return float(layer_height)
diff --git a/cura/Machines/Models/MaterialBrandsModel.py b/cura/Machines/Models/MaterialBrandsModel.py
index c4721db5f7..184d27f390 100644
--- a/cura/Machines/Models/MaterialBrandsModel.py
+++ b/cura/Machines/Models/MaterialBrandsModel.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.
from PyQt5.QtCore import Qt, pyqtSignal
@@ -29,8 +29,7 @@ class MaterialBrandsModel(BaseMaterialsModel):
def _update(self):
if not self._canUpdate():
return
- # Get updated list of favorites
- self._favorite_ids = self._material_manager.getFavorites()
+ super()._update()
brand_item_list = []
brand_group_dict = {}
@@ -55,7 +54,8 @@ class MaterialBrandsModel(BaseMaterialsModel):
# Now handle the individual materials
item = self._createMaterialItem(root_material_id, container_node)
- brand_group_dict[brand][material_type].append(item)
+ if item:
+ brand_group_dict[brand][material_type].append(item)
# Part 2: Organize the tree into models
#
diff --git a/cura/Machines/Models/MaterialManagementModel.py b/cura/Machines/Models/MaterialManagementModel.py
new file mode 100644
index 0000000000..f00b81e987
--- /dev/null
+++ b/cura/Machines/Models/MaterialManagementModel.py
@@ -0,0 +1,246 @@
+# Copyright (c) 2019 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+import copy # To duplicate materials.
+from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot # To allow the preference page proxy to be used from the actual preferences page.
+from typing import Any, Dict, Optional, TYPE_CHECKING
+import uuid # To generate new GUIDs for new materials.
+
+from UM.i18n import i18nCatalog
+from UM.Logger import Logger
+from UM.Signal import postponeSignals, CompressTechnique
+
+import cura.CuraApplication # Imported like this to prevent circular imports.
+from cura.Machines.ContainerTree import ContainerTree
+from cura.Settings.CuraContainerRegistry import CuraContainerRegistry # To find the sets of materials belonging to each other, and currently loaded extruder stacks.
+
+if TYPE_CHECKING:
+ from cura.Machines.MaterialNode import MaterialNode
+
+catalog = i18nCatalog("cura")
+
+## Proxy class to the materials page in the preferences.
+#
+# This class handles the actions in that page, such as creating new materials,
+# renaming them, etc.
+class MaterialManagementModel(QObject):
+ ## Triggered when a favorite is added or removed.
+ # \param The base file of the material is provided as parameter when this
+ # emits.
+ favoritesChanged = pyqtSignal(str)
+
+ ## Can a certain material be deleted, or is it still in use in one of the
+ # container stacks anywhere?
+ #
+ # We forbid the user from deleting a material if it's in use in any stack.
+ # Deleting it while it's in use can lead to corrupted stacks. In the
+ # future we might enable this functionality again (deleting the material
+ # from those stacks) but for now it is easier to prevent the user from
+ # doing this.
+ # \param material_node The ContainerTree node of the material to check.
+ # \return Whether or not the material can be removed.
+ @pyqtSlot("QVariant", result = bool)
+ def canMaterialBeRemoved(self, material_node: "MaterialNode") -> bool:
+ container_registry = CuraContainerRegistry.getInstance()
+ ids_to_remove = {metadata.get("id", "") for metadata in container_registry.findInstanceContainersMetadata(base_file = material_node.base_file)}
+ for extruder_stack in container_registry.findContainerStacks(type = "extruder_train"):
+ if extruder_stack.material.getId() in ids_to_remove:
+ return False
+ return True
+
+ ## Change the user-visible name of a material.
+ # \param material_node The ContainerTree node of the material to rename.
+ # \param name The new name for the material.
+ @pyqtSlot("QVariant", str)
+ def setMaterialName(self, material_node: "MaterialNode", name: str) -> None:
+ container_registry = CuraContainerRegistry.getInstance()
+ root_material_id = material_node.base_file
+ if container_registry.isReadOnly(root_material_id):
+ Logger.log("w", "Cannot set name of read-only container %s.", root_material_id)
+ return
+ return container_registry.findContainers(id = root_material_id)[0].setName(name)
+
+ ## Deletes a material from Cura.
+ #
+ # This function does not do any safety checking any more. Please call this
+ # function only if:
+ # - The material is not read-only.
+ # - The material is not used in any stacks.
+ # If the material was not lazy-loaded yet, this will fully load the
+ # container. When removing this material node, all other materials with
+ # the same base fill will also be removed.
+ # \param material_node The material to remove.
+ @pyqtSlot("QVariant")
+ def removeMaterial(self, material_node: "MaterialNode") -> None:
+ container_registry = CuraContainerRegistry.getInstance()
+ materials_this_base_file = container_registry.findContainersMetadata(base_file = material_node.base_file)
+
+ # The material containers belonging to the same material file are supposed to work together. This postponeSignals()
+ # does two things:
+ # - optimizing the signal emitting.
+ # - making sure that the signals will only be emitted after all the material containers have been removed.
+ with postponeSignals(container_registry.containerRemoved, compress = CompressTechnique.CompressPerParameterValue):
+ # CURA-6886: Some containers may not have been loaded. If remove one material container, its material file
+ # will be removed. If later we remove a sub-material container which hasn't been loaded previously, it will
+ # crash because removeContainer() requires to load the container first, but the material file was already
+ # gone.
+ for material_metadata in materials_this_base_file:
+ container_registry.findInstanceContainers(id = material_metadata["id"])
+ for material_metadata in materials_this_base_file:
+ container_registry.removeContainer(material_metadata["id"])
+
+ ## Creates a duplicate of a material with the same GUID and base_file
+ # metadata.
+ # \param base_file: The base file of the material to duplicate.
+ # \param new_base_id A new material ID for the base material. The IDs of
+ # the submaterials will be based off this one. If not provided, a material
+ # ID will be generated automatically.
+ # \param new_metadata Metadata for the new material. If not provided, this
+ # will be duplicated from the original material.
+ # \return The root material ID of the duplicate material.
+ def duplicateMaterialByBaseFile(self, base_file: str, new_base_id: Optional[str] = None,
+ new_metadata: Optional[Dict[str, Any]] = None) -> Optional[str]:
+ container_registry = CuraContainerRegistry.getInstance()
+
+ root_materials = container_registry.findContainers(id = base_file)
+ if not root_materials:
+ Logger.log("i", "Unable to duplicate the root material with ID {root_id}, because it doesn't exist.".format(root_id = base_file))
+ return None
+ root_material = root_materials[0]
+
+ # Ensure that all settings are saved.
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ application.saveSettings()
+
+ # Create a new ID and container to hold the data.
+ if new_base_id is None:
+ new_base_id = container_registry.uniqueName(root_material.getId())
+ new_root_material = copy.deepcopy(root_material)
+ new_root_material.getMetaData()["id"] = new_base_id
+ new_root_material.getMetaData()["base_file"] = new_base_id
+ if new_metadata is not None:
+ new_root_material.getMetaData().update(new_metadata)
+ new_containers = [new_root_material]
+
+ # Clone all submaterials.
+ for container_to_copy in container_registry.findInstanceContainers(base_file = base_file):
+ if container_to_copy.getId() == base_file:
+ continue # We already have that one. Skip it.
+ new_id = new_base_id
+ definition = container_to_copy.getMetaDataEntry("definition")
+ if definition != "fdmprinter":
+ new_id += "_" + definition
+ variant_name = container_to_copy.getMetaDataEntry("variant_name")
+ if variant_name:
+ new_id += "_" + variant_name.replace(" ", "_")
+
+ new_container = copy.deepcopy(container_to_copy)
+ new_container.getMetaData()["id"] = new_id
+ new_container.getMetaData()["base_file"] = new_base_id
+ if new_metadata is not None:
+ new_container.getMetaData().update(new_metadata)
+ new_containers.append(new_container)
+
+ # CURA-6863: Nodes in ContainerTree will be updated upon ContainerAdded signals, one at a time. It will use the
+ # best fit material container at the time it sees one. For example, if you duplicate and get generic_pva #2,
+ # if the node update function sees the containers in the following order:
+ #
+ # - generic_pva #2
+ # - generic_pva #2_um3_aa04
+ #
+ # It will first use "generic_pva #2" because that's the best fit it has ever seen, and later "generic_pva #2_um3_aa04"
+ # once it sees that. Because things run in the Qt event loop, they don't happen at the same time. This means if
+ # between those two events, the ContainerTree will have nodes that contain invalid data.
+ #
+ # This sort fixes the problem by emitting the most specific containers first.
+ new_containers = sorted(new_containers, key = lambda x: x.getId(), reverse = True)
+
+ # Optimization. Serving the same purpose as the postponeSignals() in removeMaterial()
+ # postpone the signals emitted when duplicating materials. This is easier on the event loop; changes the
+ # behavior to be like a transaction. Prevents concurrency issues.
+ with postponeSignals(container_registry.containerAdded, compress=CompressTechnique.CompressPerParameterValue):
+ for container_to_add in new_containers:
+ container_to_add.setDirty(True)
+ container_registry.addContainer(container_to_add)
+
+ # If the duplicated material was favorite then the new material should also be added to the favorites.
+ favorites_set = set(application.getPreferences().getValue("cura/favorite_materials").split(";"))
+ if base_file in favorites_set:
+ favorites_set.add(new_base_id)
+ application.getPreferences().setValue("cura/favorite_materials", ";".join(favorites_set))
+
+ return new_base_id
+
+ ## Creates a duplicate of a material with the same GUID and base_file
+ # metadata.
+ # \param material_node The node representing the material to duplicate.
+ # \param new_base_id A new material ID for the base material. The IDs of
+ # the submaterials will be based off this one. If not provided, a material
+ # ID will be generated automatically.
+ # \param new_metadata Metadata for the new material. If not provided, this
+ # will be duplicated from the original material.
+ # \return The root material ID of the duplicate material.
+ @pyqtSlot("QVariant", result = str)
+ def duplicateMaterial(self, material_node: "MaterialNode", new_base_id: Optional[str] = None,
+ new_metadata: Optional[Dict[str, Any]] = None) -> Optional[str]:
+ return self.duplicateMaterialByBaseFile(material_node.base_file, new_base_id, new_metadata)
+
+ ## Create a new material by cloning the preferred material for the current
+ # material diameter and generate a new GUID.
+ #
+ # The material type is explicitly left to be the one from the preferred
+ # material, since this allows the user to still have SOME profiles to work
+ # with.
+ # \return The ID of the newly created material.
+ @pyqtSlot(result = str)
+ def createMaterial(self) -> str:
+ # Ensure all settings are saved.
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ application.saveSettings()
+
+ # Find the preferred material.
+ extruder_stack = application.getMachineManager().activeStack
+ active_variant_name = extruder_stack.variant.getName()
+ approximate_diameter = int(extruder_stack.approximateMaterialDiameter)
+ global_container_stack = application.getGlobalContainerStack()
+ if not global_container_stack:
+ return ""
+ machine_node = ContainerTree.getInstance().machines[global_container_stack.definition.getId()]
+ preferred_material_node = machine_node.variants[active_variant_name].preferredMaterial(approximate_diameter)
+
+ # Create a new ID & new metadata for the new material.
+ new_id = CuraContainerRegistry.getInstance().uniqueName("custom_material")
+ new_metadata = {"name": catalog.i18nc("@label", "Custom Material"),
+ "brand": catalog.i18nc("@label", "Custom"),
+ "GUID": str(uuid.uuid4()),
+ }
+
+ self.duplicateMaterial(preferred_material_node, new_base_id = new_id, new_metadata = new_metadata)
+ return new_id
+
+ ## Adds a certain material to the favorite materials.
+ # \param material_base_file The base file of the material to add.
+ @pyqtSlot(str)
+ def addFavorite(self, material_base_file: str) -> None:
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ favorites = application.getPreferences().getValue("cura/favorite_materials").split(";")
+ if material_base_file not in favorites:
+ favorites.append(material_base_file)
+ application.getPreferences().setValue("cura/favorite_materials", ";".join(favorites))
+ application.saveSettings()
+ self.favoritesChanged.emit(material_base_file)
+
+ ## Removes a certain material from the favorite materials.
+ #
+ # If the material was not in the favorite materials, nothing happens.
+ @pyqtSlot(str)
+ def removeFavorite(self, material_base_file: str) -> None:
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ favorites = application.getPreferences().getValue("cura/favorite_materials").split(";")
+ try:
+ favorites.remove(material_base_file)
+ application.getPreferences().setValue("cura/favorite_materials", ";".join(favorites))
+ application.saveSettings()
+ self.favoritesChanged.emit(material_base_file)
+ except ValueError: # Material was not in the favorites list.
+ Logger.log("w", "Material {material_base_file} was already not a favorite material.".format(material_base_file = material_base_file))
diff --git a/cura/Machines/Models/NozzleModel.py b/cura/Machines/Models/NozzleModel.py
index 785ff5b9b9..5f7f8b02f5 100644
--- a/cura/Machines/Models/NozzleModel.py
+++ b/cura/Machines/Models/NozzleModel.py
@@ -1,14 +1,12 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from PyQt5.QtCore import Qt
-from UM.Application import Application
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
-from UM.Util import parseBool
-
-from cura.Machines.VariantType import VariantType
+import cura.CuraApplication # Imported like this to prevent circular dependencies.
+from cura.Machines.ContainerTree import ContainerTree
class NozzleModel(ListModel):
@@ -23,33 +21,24 @@ class NozzleModel(ListModel):
self.addRoleName(self.HotendNameRole, "hotend_name")
self.addRoleName(self.ContainerNodeRole, "container_node")
- self._application = Application.getInstance()
- self._machine_manager = self._application.getMachineManager()
- self._variant_manager = self._application.getVariantManager()
-
- self._machine_manager.globalContainerChanged.connect(self._update)
+ cura.CuraApplication.CuraApplication.getInstance().getMachineManager().globalContainerChanged.connect(self._update)
self._update()
def _update(self):
Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__))
- global_stack = self._machine_manager.activeMachine
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
if global_stack is None:
self.setItems([])
return
+ machine_node = ContainerTree.getInstance().machines[global_stack.definition.getId()]
- has_variants = parseBool(global_stack.getMetaDataEntry("has_variants", False))
- if not has_variants:
- self.setItems([])
- return
-
- variant_node_dict = self._variant_manager.getVariantNodes(global_stack, VariantType.NOZZLE)
- if not variant_node_dict:
+ if not machine_node.has_variants:
self.setItems([])
return
item_list = []
- for hotend_name, container_node in sorted(variant_node_dict.items(), key = lambda i: i[0].upper()):
+ for hotend_name, container_node in sorted(machine_node.variants.items(), key = lambda i: i[0].upper()):
item = {"id": hotend_name,
"hotend_name": hotend_name,
"container_node": container_node
@@ -57,4 +46,4 @@ class NozzleModel(ListModel):
item_list.append(item)
- self.setItems(item_list)
+ self.setItems(item_list)
\ No newline at end of file
diff --git a/cura/Machines/Models/QualityManagementModel.py b/cura/Machines/Models/QualityManagementModel.py
index 315ab010bb..74dc8649d0 100644
--- a/cura/Machines/Models/QualityManagementModel.py
+++ b/cura/Machines/Models/QualityManagementModel.py
@@ -1,10 +1,30 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt, pyqtSlot
+from typing import Any, cast, Dict, Optional, TYPE_CHECKING
+from PyQt5.QtCore import pyqtSlot, QObject, Qt, QTimer
-from UM.Qt.ListModel import ListModel
from UM.Logger import Logger
+from UM.Qt.ListModel import ListModel
+from UM.Settings.InstanceContainer import InstanceContainer # To create new profiles.
+
+import cura.CuraApplication # Imported this way to prevent circular imports.
+from cura.Settings.ContainerManager import ContainerManager
+from cura.Machines.ContainerTree import ContainerTree
+from cura.Settings.cura_empty_instance_containers import empty_quality_changes_container
+from cura.Settings.IntentManager import IntentManager
+from cura.Machines.Models.MachineModelUtils import fetchLayerHeight
+from cura.Machines.Models.IntentTranslations import intent_translations
+
+from UM.i18n import i18nCatalog
+catalog = i18nCatalog("cura")
+
+if TYPE_CHECKING:
+ from UM.Settings.Interfaces import ContainerInterface
+ from cura.Machines.QualityChangesGroup import QualityChangesGroup
+ from cura.Settings.ExtruderStack import ExtruderStack
+ from cura.Settings.GlobalStack import GlobalStack
+
#
# This the QML model for the quality management page.
@@ -13,26 +33,257 @@ class QualityManagementModel(ListModel):
NameRole = Qt.UserRole + 1
IsReadOnlyRole = Qt.UserRole + 2
QualityGroupRole = Qt.UserRole + 3
- QualityChangesGroupRole = Qt.UserRole + 4
+ QualityTypeRole = Qt.UserRole + 4
+ QualityChangesGroupRole = Qt.UserRole + 5
+ IntentCategoryRole = Qt.UserRole + 6
+ SectionNameRole = Qt.UserRole + 7
- def __init__(self, parent = None):
+ def __init__(self, parent: Optional["QObject"] = None) -> None:
super().__init__(parent)
self.addRoleName(self.NameRole, "name")
self.addRoleName(self.IsReadOnlyRole, "is_read_only")
self.addRoleName(self.QualityGroupRole, "quality_group")
+ self.addRoleName(self.QualityTypeRole, "quality_type")
self.addRoleName(self.QualityChangesGroupRole, "quality_changes_group")
+ self.addRoleName(self.IntentCategoryRole, "intent_category")
+ self.addRoleName(self.SectionNameRole, "section_name")
- from cura.CuraApplication import CuraApplication
- self._container_registry = CuraApplication.getInstance().getContainerRegistry()
- self._machine_manager = CuraApplication.getInstance().getMachineManager()
- self._extruder_manager = CuraApplication.getInstance().getExtruderManager()
- self._quality_manager = CuraApplication.getInstance().getQualityManager()
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ container_registry = application.getContainerRegistry()
+ self._machine_manager = application.getMachineManager()
+ self._machine_manager.activeQualityGroupChanged.connect(self._onChange)
+ self._machine_manager.activeStackChanged.connect(self._onChange)
+ self._machine_manager.extruderChanged.connect(self._onChange)
+ self._machine_manager.globalContainerChanged.connect(self._onChange)
- self._machine_manager.globalContainerChanged.connect(self._update)
- self._quality_manager.qualitiesUpdated.connect(self._update)
+ self._extruder_manager = application.getExtruderManager()
+ self._extruder_manager.extrudersChanged.connect(self._onChange)
- self._update()
+ container_registry.containerAdded.connect(self._qualityChangesListChanged)
+ container_registry.containerRemoved.connect(self._qualityChangesListChanged)
+ container_registry.containerMetaDataChanged.connect(self._qualityChangesListChanged)
+
+ self._update_timer = QTimer()
+ self._update_timer.setInterval(100)
+ self._update_timer.setSingleShot(True)
+ self._update_timer.timeout.connect(self._update)
+
+ self._onChange()
+
+ def _onChange(self) -> None:
+ self._update_timer.start()
+
+ ## Deletes a custom profile. It will be gone forever.
+ # \param quality_changes_group The quality changes group representing the
+ # profile to delete.
+ @pyqtSlot(QObject)
+ def removeQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup") -> None:
+ Logger.log("i", "Removing quality changes group {group_name}".format(group_name = quality_changes_group.name))
+ removed_quality_changes_ids = set()
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
+ for metadata in [quality_changes_group.metadata_for_global] + list(quality_changes_group.metadata_per_extruder.values()):
+ container_id = metadata["id"]
+ container_registry.removeContainer(container_id)
+ removed_quality_changes_ids.add(container_id)
+
+ # Reset all machines that have activated this custom profile.
+ for global_stack in container_registry.findContainerStacks(type = "machine"):
+ if global_stack.qualityChanges.getId() in removed_quality_changes_ids:
+ global_stack.qualityChanges = empty_quality_changes_container
+ for extruder_stack in container_registry.findContainerStacks(type = "extruder_train"):
+ if extruder_stack.qualityChanges.getId() in removed_quality_changes_ids:
+ extruder_stack.qualityChanges = empty_quality_changes_container
+
+ ## Rename a custom profile.
+ #
+ # Because the names must be unique, the new name may not actually become
+ # the name that was given. The actual name is returned by this function.
+ # \param quality_changes_group The custom profile that must be renamed.
+ # \param new_name The desired name for the profile.
+ # \return The actual new name of the profile, after making the name
+ # unique.
+ @pyqtSlot(QObject, str, result = str)
+ def renameQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup", new_name: str) -> str:
+ Logger.log("i", "Renaming QualityChangesGroup {old_name} to {new_name}.".format(old_name = quality_changes_group.name, new_name = new_name))
+ if new_name == quality_changes_group.name:
+ Logger.log("i", "QualityChangesGroup name {name} unchanged.".format(name = quality_changes_group.name))
+ return new_name
+
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ container_registry = application.getContainerRegistry()
+ new_name = container_registry.uniqueName(new_name)
+ # CURA-6842
+ # FIXME: setName() will trigger metaDataChanged signal that are connected with type Qt.AutoConnection. In this
+ # case, setName() will trigger direct connections which in turn causes the quality changes group and the models
+ # to update. Because multiple containers need to be renamed, and every time a container gets renamed, updates
+ # gets triggered and this results in partial updates. For example, if we rename the global quality changes
+ # container first, the rest of the system still thinks that I have selected "my_profile" instead of
+ # "my_new_profile", but an update already gets triggered, and the quality changes group that's selected will
+ # have no container for the global stack, because "my_profile" just got renamed to "my_new_profile". This results
+ # in crashes because the rest of the system assumes that all data in a QualityChangesGroup will be correct.
+ #
+ # Renaming the container for the global stack in the end seems to be ok, because the assumption is mostly based
+ # on the quality changes container for the global stack.
+ for metadata in quality_changes_group.metadata_per_extruder.values():
+ extruder_container = cast(InstanceContainer, container_registry.findContainers(id = metadata["id"])[0])
+ extruder_container.setName(new_name)
+ global_container = cast(InstanceContainer, container_registry.findContainers(id=quality_changes_group.metadata_for_global["id"])[0])
+ global_container.setName(new_name)
+
+ quality_changes_group.name = new_name
+
+ application.getMachineManager().activeQualityChanged.emit()
+ application.getMachineManager().activeQualityGroupChanged.emit()
+
+ return new_name
+
+ ## Duplicates a given quality profile OR quality changes profile.
+ # \param new_name The desired name of the new profile. This will be made
+ # unique, so it might end up with a different name.
+ # \param quality_model_item The item of this model to duplicate, as
+ # dictionary. See the descriptions of the roles of this list model.
+ @pyqtSlot(str, "QVariantMap")
+ def duplicateQualityChanges(self, new_name: str, quality_model_item: Dict[str, Any]) -> None:
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if not global_stack:
+ Logger.log("i", "No active global stack, cannot duplicate quality (changes) profile.")
+ return
+
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
+ new_name = container_registry.uniqueName(new_name)
+
+ intent_category = quality_model_item["intent_category"]
+ quality_group = quality_model_item["quality_group"]
+ quality_changes_group = quality_model_item["quality_changes_group"]
+ if quality_changes_group is None:
+ # Create global quality changes only.
+ new_quality_changes = self._createQualityChanges(quality_group.quality_type, intent_category, new_name,
+ global_stack, extruder_stack = None)
+ container_registry.addContainer(new_quality_changes)
+ else:
+ for metadata in [quality_changes_group.metadata_for_global] + list(quality_changes_group.metadata_per_extruder.values()):
+ containers = container_registry.findContainers(id = metadata["id"])
+ if not containers:
+ continue
+ container = containers[0]
+ new_id = container_registry.uniqueName(container.getId())
+ container_registry.addContainer(container.duplicate(new_id, new_name))
+
+ ## Create quality changes containers from the user containers in the active
+ # stacks.
+ #
+ # This will go through the global and extruder stacks and create
+ # quality_changes containers from the user containers in each stack. These
+ # then replace the quality_changes containers in the stack and clear the
+ # user settings.
+ # \param base_name The new name for the quality changes profile. The final
+ # name of the profile might be different from this, because it needs to be
+ # made unique.
+ @pyqtSlot(str)
+ def createQualityChanges(self, base_name: str) -> None:
+ machine_manager = cura.CuraApplication.CuraApplication.getInstance().getMachineManager()
+
+ global_stack = machine_manager.activeMachine
+ if not global_stack:
+ return
+
+ active_quality_name = machine_manager.activeQualityOrQualityChangesName
+ if active_quality_name == "":
+ Logger.log("w", "No quality container found in stack %s, cannot create profile", global_stack.getId())
+ return
+
+ machine_manager.blurSettings.emit()
+ if base_name is None or base_name == "":
+ base_name = active_quality_name
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
+ unique_name = container_registry.uniqueName(base_name)
+
+ # Go through the active stacks and create quality_changes containers from the user containers.
+ container_manager = ContainerManager.getInstance()
+ stack_list = [global_stack] + list(global_stack.extruders.values())
+ for stack in stack_list:
+ quality_container = stack.quality
+ quality_changes_container = stack.qualityChanges
+ if not quality_container or not quality_changes_container:
+ Logger.log("w", "No quality or quality changes container found in stack %s, ignoring it", stack.getId())
+ continue
+
+ extruder_stack = None
+ intent_category = None
+ if stack.getMetaDataEntry("position") is not None:
+ extruder_stack = stack
+ intent_category = stack.intent.getMetaDataEntry("intent_category")
+ new_changes = self._createQualityChanges(quality_container.getMetaDataEntry("quality_type"), intent_category, unique_name, global_stack, extruder_stack)
+ container_manager._performMerge(new_changes, quality_changes_container, clear_settings = False)
+ container_manager._performMerge(new_changes, stack.userChanges)
+
+ container_registry.addContainer(new_changes)
+
+ ## Create a quality changes container with the given set-up.
+ # \param quality_type The quality type of the new container.
+ # \param intent_category The intent category of the new container.
+ # \param new_name The name of the container. This name must be unique.
+ # \param machine The global stack to create the profile for.
+ # \param extruder_stack The extruder stack to create the profile for. If
+ # not provided, only a global container will be created.
+ def _createQualityChanges(self, quality_type: str, intent_category: Optional[str], new_name: str, machine: "GlobalStack", extruder_stack: Optional["ExtruderStack"]) -> "InstanceContainer":
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
+ base_id = machine.definition.getId() if extruder_stack is None else extruder_stack.getId()
+ new_id = base_id + "_" + new_name
+ new_id = new_id.lower().replace(" ", "_")
+ new_id = container_registry.uniqueName(new_id)
+
+ # Create a new quality_changes container for the quality.
+ quality_changes = InstanceContainer(new_id)
+ quality_changes.setName(new_name)
+ quality_changes.setMetaDataEntry("type", "quality_changes")
+ quality_changes.setMetaDataEntry("quality_type", quality_type)
+ if intent_category is not None:
+ quality_changes.setMetaDataEntry("intent_category", intent_category)
+
+ # If we are creating a container for an extruder, ensure we add that to the container.
+ if extruder_stack is not None:
+ quality_changes.setMetaDataEntry("position", extruder_stack.getMetaDataEntry("position"))
+
+ # If the machine specifies qualities should be filtered, ensure we match the current criteria.
+ machine_definition_id = ContainerTree.getInstance().machines[machine.definition.getId()].quality_definition
+ quality_changes.setDefinition(machine_definition_id)
+
+ quality_changes.setMetaDataEntry("setting_version", cura.CuraApplication.CuraApplication.getInstance().SettingVersion)
+ return quality_changes
+
+ ## Triggered when any container changed.
+ #
+ # This filters the updates to the container manager: When it applies to
+ # the list of quality changes, we need to update our list.
+ def _qualityChangesListChanged(self, container: "ContainerInterface") -> None:
+ if container.getMetaDataEntry("type") == "quality_changes":
+ self._update()
+
+ @pyqtSlot("QVariantMap", result = str)
+ def getQualityItemDisplayName(self, quality_model_item: Dict[str, Any]) -> str:
+ quality_group = quality_model_item["quality_group"]
+ is_read_only = quality_model_item["is_read_only"]
+ intent_category = quality_model_item["intent_category"]
+
+ quality_level_name = "Not Supported"
+ if quality_group is not None:
+ quality_level_name = quality_group.name
+
+ display_name = quality_level_name
+
+ if intent_category != "default":
+ intent_display_name = catalog.i18nc("@label", intent_category.capitalize())
+ display_name = "{intent_name} - {the_rest}".format(intent_name = intent_display_name,
+ the_rest = display_name)
+
+ # A custom quality
+ if not is_read_only:
+ display_name = "{custom_profile_name} - {the_rest}".format(custom_profile_name = quality_model_item["name"],
+ the_rest = display_name)
+
+ return display_name
def _update(self):
Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__))
@@ -42,38 +293,71 @@ class QualityManagementModel(ListModel):
self.setItems([])
return
- quality_group_dict = self._quality_manager.getQualityGroups(global_stack)
- quality_changes_group_dict = self._quality_manager.getQualityChangesGroups(global_stack)
+ container_tree = ContainerTree.getInstance()
+ quality_group_dict = container_tree.getCurrentQualityGroups()
+ quality_changes_group_list = container_tree.getCurrentQualityChangesGroups()
available_quality_types = set(quality_type for quality_type, quality_group in quality_group_dict.items()
if quality_group.is_available)
- if not available_quality_types and not quality_changes_group_dict:
+ if not available_quality_types and not quality_changes_group_list:
# Nothing to show
self.setItems([])
return
item_list = []
- # Create quality group items
+ # Create quality group items (intent category = "default")
for quality_group in quality_group_dict.values():
if not quality_group.is_available:
continue
+ layer_height = fetchLayerHeight(quality_group)
+
item = {"name": quality_group.name,
"is_read_only": True,
"quality_group": quality_group,
- "quality_changes_group": None}
+ "quality_type": quality_group.quality_type,
+ "quality_changes_group": None,
+ "intent_category": "default",
+ "section_name": catalog.i18nc("@label", "Default"),
+ "layer_height": layer_height, # layer_height is only used for sorting
+ }
item_list.append(item)
- # Sort by quality names
- item_list = sorted(item_list, key = lambda x: x["name"].upper())
+ # Sort by layer_height for built-in qualities
+ item_list = sorted(item_list, key = lambda x: x["layer_height"])
+
+ # Create intent items (non-default)
+ available_intent_list = IntentManager.getInstance().getCurrentAvailableIntents()
+ available_intent_list = [i for i in available_intent_list if i[0] != "default"]
+ result = []
+ for intent_category, quality_type in available_intent_list:
+ result.append({
+ "name": quality_group_dict[quality_type].name, # Use the quality name as the display name
+ "is_read_only": True,
+ "quality_group": quality_group_dict[quality_type],
+ "quality_type": quality_type,
+ "quality_changes_group": None,
+ "intent_category": intent_category,
+ "section_name": catalog.i18nc("@label", intent_translations.get(intent_category, {}).get("name", catalog.i18nc("@label", "Unknown"))),
+ })
+ # Sort by quality_type for each intent category
+
+ result = sorted(result, key = lambda x: (list(intent_translations).index(x["intent_category"]), x["quality_type"]))
+ item_list += result
# Create quality_changes group items
quality_changes_item_list = []
- for quality_changes_group in quality_changes_group_dict.values():
+ for quality_changes_group in quality_changes_group_list:
+ # CURA-6913 Note that custom qualities can be based on "not supported", so the quality group can be None.
quality_group = quality_group_dict.get(quality_changes_group.quality_type)
+ quality_type = quality_changes_group.quality_type
item = {"name": quality_changes_group.name,
"is_read_only": False,
"quality_group": quality_group,
- "quality_changes_group": quality_changes_group}
+ "quality_type": quality_type,
+ "quality_changes_group": quality_changes_group,
+ "intent_category": quality_changes_group.intent_category,
+ "section_name": catalog.i18nc("@label", "Custom profiles"),
+ }
quality_changes_item_list.append(item)
# Sort quality_changes items by names and append to the item list
diff --git a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py
index deabb6e9ba..3a79ceeaf1 100644
--- a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py
+++ b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py
@@ -1,14 +1,13 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from PyQt5.QtCore import Qt, QTimer
-from UM.Application import Application
+import cura.CuraApplication # Imported this way to prevent circular dependencies.
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
-from UM.Settings.SettingFunction import SettingFunction
-
-from cura.Machines.QualityManager import QualityGroup
+from cura.Machines.ContainerTree import ContainerTree
+from cura.Machines.Models.MachineModelUtils import fetchLayerHeight
#
@@ -36,14 +35,17 @@ class QualityProfilesDropDownMenuModel(ListModel):
self.addRoleName(self.QualityChangesGroupRole, "quality_changes_group")
self.addRoleName(self.IsExperimentalRole, "is_experimental")
- self._application = Application.getInstance()
- self._machine_manager = self._application.getMachineManager()
- self._quality_manager = Application.getInstance().getQualityManager()
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ machine_manager = application.getMachineManager()
- self._application.globalContainerStackChanged.connect(self._onChange)
- self._machine_manager.activeQualityGroupChanged.connect(self._onChange)
- self._machine_manager.extruderChanged.connect(self._onChange)
- self._quality_manager.qualitiesUpdated.connect(self._onChange)
+ application.globalContainerStackChanged.connect(self._onChange)
+ machine_manager.activeQualityGroupChanged.connect(self._onChange)
+ machine_manager.activeMaterialChanged.connect(self._onChange)
+ machine_manager.activeVariantChanged.connect(self._onChange)
+ machine_manager.extruderChanged.connect(self._onChange)
+
+ extruder_manager = application.getExtruderManager()
+ extruder_manager.extrudersChanged.connect(self._onChange)
self._layer_height_unit = "" # This is cached
@@ -60,25 +62,36 @@ class QualityProfilesDropDownMenuModel(ListModel):
def _update(self):
Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__))
- global_stack = self._machine_manager.activeMachine
+ # CURA-6836
+ # LabelBar is a repeater that creates labels for quality layer heights. Because of an optimization in
+ # UM.ListModel, the model will not remove all items and recreate new ones every time there's an update.
+ # Because LabelBar uses Repeater with Labels anchoring to "undefined" in certain cases, the anchoring will be
+ # kept the same as before.
+ self.setItems([])
+
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
if global_stack is None:
self.setItems([])
Logger.log("d", "No active GlobalStack, set quality profile model as empty.")
return
+ if not self._layer_height_unit:
+ unit = global_stack.definition.getProperty("layer_height", "unit")
+ if not unit:
+ unit = ""
+ self._layer_height_unit = unit
+
# Check for material compatibility
- if not self._machine_manager.activeMaterialsCompatible():
+ if not cura.CuraApplication.CuraApplication.getInstance().getMachineManager().activeMaterialsCompatible():
Logger.log("d", "No active material compatibility, set quality profile model as empty.")
self.setItems([])
return
- quality_group_dict = self._quality_manager.getQualityGroups(global_stack)
+ quality_group_dict = ContainerTree.getInstance().getCurrentQualityGroups()
item_list = []
- for key in sorted(quality_group_dict):
- quality_group = quality_group_dict[key]
-
- layer_height = self._fetchLayerHeight(quality_group)
+ for quality_group in quality_group_dict.values():
+ layer_height = fetchLayerHeight(quality_group)
item = {"name": quality_group.name,
"quality_type": quality_group.quality_type,
@@ -94,32 +107,3 @@ class QualityProfilesDropDownMenuModel(ListModel):
item_list = sorted(item_list, key = lambda x: x["layer_height"])
self.setItems(item_list)
-
- def _fetchLayerHeight(self, quality_group: "QualityGroup") -> float:
- global_stack = self._machine_manager.activeMachine
- if not self._layer_height_unit:
- unit = global_stack.definition.getProperty("layer_height", "unit")
- if not unit:
- unit = ""
- self._layer_height_unit = unit
-
- default_layer_height = global_stack.definition.getProperty("layer_height", "value")
-
- # Get layer_height from the quality profile for the GlobalStack
- if quality_group.node_for_global is None:
- return float(default_layer_height)
- container = quality_group.node_for_global.getContainer()
-
- layer_height = default_layer_height
- if container and container.hasProperty("layer_height", "value"):
- layer_height = container.getProperty("layer_height", "value")
- else:
- # Look for layer_height in the GlobalStack from material -> definition
- container = global_stack.definition
- if container and container.hasProperty("layer_height", "value"):
- layer_height = container.getProperty("layer_height", "value")
-
- if isinstance(layer_height, SettingFunction):
- layer_height = layer_height(global_stack)
-
- return float(layer_height)
diff --git a/cura/Machines/Models/QualitySettingsModel.py b/cura/Machines/Models/QualitySettingsModel.py
index 88005e69ca..6835ffb68f 100644
--- a/cura/Machines/Models/QualitySettingsModel.py
+++ b/cura/Machines/Models/QualitySettingsModel.py
@@ -1,9 +1,9 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from PyQt5.QtCore import pyqtProperty, pyqtSignal, Qt
-from UM.Application import Application
+import cura.CuraApplication
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
from UM.Settings.ContainerRegistry import ContainerRegistry
@@ -35,15 +35,13 @@ class QualitySettingsModel(ListModel):
self.addRoleName(self.CategoryRole, "category")
self._container_registry = ContainerRegistry.getInstance()
- self._application = Application.getInstance()
- self._quality_manager = self._application.getQualityManager()
+ self._application = cura.CuraApplication.CuraApplication.getInstance()
+ self._application.getMachineManager().activeStackChanged.connect(self._update)
self._selected_position = self.GLOBAL_STACK_POSITION #Must be either GLOBAL_STACK_POSITION or an extruder position (0, 1, etc.)
self._selected_quality_item = None # The selected quality in the quality management page
self._i18n_catalog = None
- self._quality_manager.qualitiesUpdated.connect(self._update)
-
self._update()
selectedPositionChanged = pyqtSignal()
@@ -93,21 +91,33 @@ class QualitySettingsModel(ListModel):
quality_node = quality_group.nodes_for_extruders.get(str(self._selected_position))
settings_keys = quality_group.getAllKeys()
quality_containers = []
- if quality_node is not None and quality_node.getContainer() is not None:
- quality_containers.append(quality_node.getContainer())
+ if quality_node is not None and quality_node.container is not None:
+ quality_containers.append(quality_node.container)
# Here, if the user has selected a quality changes, then "quality_changes_group" will not be None, and we fetch
# the settings in that quality_changes_group.
if quality_changes_group is not None:
- if self._selected_position == self.GLOBAL_STACK_POSITION:
- quality_changes_node = quality_changes_group.node_for_global
+ container_registry = ContainerRegistry.getInstance()
+ global_containers = container_registry.findContainers(id = quality_changes_group.metadata_for_global["id"])
+ global_container = None if len(global_containers) == 0 else global_containers[0]
+ extruders_containers = {pos: container_registry.findContainers(id = quality_changes_group.metadata_per_extruder[pos]["id"]) for pos in quality_changes_group.metadata_per_extruder}
+ extruders_container = {pos: None if not containers else containers[0] for pos, containers in extruders_containers.items()}
+ if self._selected_position == self.GLOBAL_STACK_POSITION and global_container:
+ quality_changes_metadata = global_container.getMetaData()
else:
- quality_changes_node = quality_changes_group.nodes_for_extruders.get(str(self._selected_position))
- if quality_changes_node is not None and quality_changes_node.getContainer() is not None: # it can be None if number of extruders are changed during runtime
- quality_containers.insert(0, quality_changes_node.getContainer())
- settings_keys.update(quality_changes_group.getAllKeys())
+ quality_changes_metadata = extruders_container.get(str(self._selected_position))
+ if quality_changes_metadata is not None: # It can be None if number of extruders are changed during runtime.
+ container = container_registry.findContainers(id = quality_changes_metadata["id"])
+ if container:
+ quality_containers.insert(0, container[0])
- # We iterate over all definitions instead of settings in a quality/qualtiy_changes group is because in the GUI,
+ if global_container:
+ settings_keys.update(global_container.getAllKeys())
+ for container in extruders_container.values():
+ if container:
+ settings_keys.update(container.getAllKeys())
+
+ # We iterate over all definitions instead of settings in a quality/quality_changes group is because in the GUI,
# the settings are grouped together by categories, and we had to go over all the definitions to figure out
# which setting belongs in which category.
current_category = ""
diff --git a/cura/Machines/QualityChangesGroup.py b/cura/Machines/QualityChangesGroup.py
index 7844b935dc..655060070b 100644
--- a/cura/Machines/QualityChangesGroup.py
+++ b/cura/Machines/QualityChangesGroup.py
@@ -1,33 +1,37 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import TYPE_CHECKING
+from typing import Any, Dict, Optional
-from UM.Application import Application
-from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
-
-from .QualityGroup import QualityGroup
-
-if TYPE_CHECKING:
- from cura.Machines.QualityNode import QualityNode
+from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal
-class QualityChangesGroup(QualityGroup):
- def __init__(self, name: str, quality_type: str, parent = None) -> None:
- super().__init__(name, quality_type, parent)
- self._container_registry = Application.getInstance().getContainerRegistry()
+## Data struct to group several quality changes instance containers together.
+#
+# Each group represents one "custom profile" as the user sees it, which
+# contains an instance container for the global stack and one instance
+# container per extruder.
+class QualityChangesGroup(QObject):
- def addNode(self, node: "QualityNode") -> None:
- extruder_position = node.getMetaDataEntry("position")
+ def __init__(self, name: str, quality_type: str, intent_category: str, parent: Optional["QObject"] = None) -> None:
+ super().__init__(parent)
+ self._name = name
+ self.quality_type = quality_type
+ self.intent_category = intent_category
+ self.is_available = False
+ self.metadata_for_global = {} # type: Dict[str, Any]
+ self.metadata_per_extruder = {} # type: Dict[int, Dict[str, Any]]
- if extruder_position is None and self.node_for_global is not None or extruder_position in self.nodes_for_extruders: #We would be overwriting another node.
- ConfigurationErrorMessage.getInstance().addFaultyContainers(node.getMetaDataEntry("id"))
- return
+ nameChanged = pyqtSignal()
- if extruder_position is None: # Then we're a global quality changes profile.
- self.node_for_global = node
- else: # This is an extruder's quality changes profile.
- self.nodes_for_extruders[extruder_position] = node
+ def setName(self, name: str) -> None:
+ if self._name != name:
+ self._name = name
+ self.nameChanged.emit()
+
+ @pyqtProperty(str, fset = setName, notify = nameChanged)
+ def name(self) -> str:
+ return self._name
def __str__(self) -> str:
- return "%s[<%s>, available = %s]" % (self.__class__.__name__, self.name, self.is_available)
+ return "{class_name}[{name}, available = {is_available}]".format(class_name = self.__class__.__name__, name = self.name, is_available = self.is_available)
diff --git a/cura/Machines/QualityGroup.py b/cura/Machines/QualityGroup.py
index f5bcbb0de8..58ba3acc63 100644
--- a/cura/Machines/QualityGroup.py
+++ b/cura/Machines/QualityGroup.py
@@ -1,32 +1,38 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Dict, Optional, List, Set
from PyQt5.QtCore import QObject, pyqtSlot
+from UM.Logger import Logger
from UM.Util import parseBool
from cura.Machines.ContainerNode import ContainerNode
+## A QualityGroup represents a group of quality containers that must be applied
+# to each ContainerStack when it's used.
#
-# A QualityGroup represents a group of containers that must be applied to each ContainerStack when it's used.
-# Some concrete examples are Quality and QualityChanges: when we select quality type "normal", this quality type
-# must be applied to all stacks in a machine, although each stack can have different containers. Use an Ultimaker 3
-# as an example, suppose we choose quality type "normal", the actual InstanceContainers on each stack may look
-# as below:
-# GlobalStack ExtruderStack 1 ExtruderStack 2
-# quality container: um3_global_normal um3_aa04_pla_normal um3_aa04_abs_normal
+# A concrete example: When there are two extruders and the user selects the
+# quality type "normal", this quality type must be applied to all stacks in a
+# machine, although each stack can have different containers. So one global
+# profile gets put on the global stack and one extruder profile gets put on
+# each extruder stack. This quality group then contains the following
+# profiles (for instance):
+# GlobalStack ExtruderStack 1 ExtruderStack 2
+# quality container: um3_global_normal um3_aa04_pla_normal um3_aa04_abs_normal
#
-# This QualityGroup is mainly used in quality and quality_changes to group the containers that can be applied to
-# a machine, so when a quality/custom quality is selected, the container can be directly applied to each stack instead
-# of looking them up again.
-#
-class QualityGroup(QObject):
-
- def __init__(self, name: str, quality_type: str, parent = None) -> None:
- super().__init__(parent)
+# The purpose of these quality groups is to group the containers that can be
+# applied to a configuration, so that when a quality level is selected, the
+# container can directly be applied to each stack instead of looking them up
+# again.
+class QualityGroup:
+ ## Constructs a new group.
+ # \param name The user-visible name for the group.
+ # \param quality_type The quality level that each profile in this group
+ # has.
+ def __init__(self, name: str, quality_type: str) -> None:
self.name = name
self.node_for_global = None # type: Optional[ContainerNode]
self.nodes_for_extruders = {} # type: Dict[int, ContainerNode]
@@ -34,7 +40,6 @@ class QualityGroup(QObject):
self.is_available = False
self.is_experimental = False
- @pyqtSlot(result = str)
def getName(self) -> str:
return self.name
@@ -43,7 +48,7 @@ class QualityGroup(QObject):
for node in [self.node_for_global] + list(self.nodes_for_extruders.values()):
if node is None:
continue
- container = node.getContainer()
+ container = node.container
if container:
result.update(container.getAllKeys())
return result
@@ -60,6 +65,9 @@ class QualityGroup(QObject):
self.node_for_global = node
# Update is_experimental flag
+ if not node.container:
+ Logger.log("w", "Node {0} doesn't have a container.".format(node.container_id))
+ return
is_experimental = parseBool(node.getMetaDataEntry("is_experimental", False))
self.is_experimental |= is_experimental
@@ -67,5 +75,8 @@ class QualityGroup(QObject):
self.nodes_for_extruders[position] = node
# Update is_experimental flag
+ if not node.container:
+ Logger.log("w", "Node {0} doesn't have a container.".format(node.container_id))
+ return
is_experimental = parseBool(node.getMetaDataEntry("is_experimental", False))
self.is_experimental |= is_experimental
diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py
deleted file mode 100644
index 70fadc792b..0000000000
--- a/cura/Machines/QualityManager.py
+++ /dev/null
@@ -1,554 +0,0 @@
-# Copyright (c) 2018 Ultimaker B.V.
-# Cura is released under the terms of the LGPLv3 or higher.
-
-from typing import TYPE_CHECKING, Optional, cast, Dict, List, Set
-
-from PyQt5.QtCore import QObject, QTimer, pyqtSignal, pyqtSlot
-
-from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
-from UM.Logger import Logger
-from UM.Util import parseBool
-from UM.Settings.InstanceContainer import InstanceContainer
-
-from cura.Settings.ExtruderStack import ExtruderStack
-
-from .QualityGroup import QualityGroup
-from .QualityNode import QualityNode
-
-if TYPE_CHECKING:
- from UM.Settings.Interfaces import DefinitionContainerInterface
- from cura.Settings.GlobalStack import GlobalStack
- from .QualityChangesGroup import QualityChangesGroup
- from cura.CuraApplication import CuraApplication
-
-
-#
-# Similar to MaterialManager, QualityManager maintains a number of maps and trees for quality profile lookup.
-# The models GUI and QML use are now only dependent on the QualityManager. That means as long as the data in
-# QualityManager gets updated correctly, the GUI models should be updated correctly too, and the same goes for GUI.
-#
-# For now, updating the lookup maps and trees here is very simple: we discard the old data completely and recreate them
-# again. This means the update is exactly the same as initialization. There are performance concerns about this approach
-# but so far the creation of the tables and maps is very fast and there is no noticeable slowness, we keep it like this
-# because it's simple.
-#
-class QualityManager(QObject):
-
- qualitiesUpdated = pyqtSignal()
-
- def __init__(self, application: "CuraApplication", parent = None) -> None:
- super().__init__(parent)
- self._application = application
- self._material_manager = self._application.getMaterialManager()
- self._container_registry = self._application.getContainerRegistry()
-
- self._empty_quality_container = self._application.empty_quality_container
- self._empty_quality_changes_container = self._application.empty_quality_changes_container
-
- # For quality lookup
- self._machine_nozzle_buildplate_material_quality_type_to_quality_dict = {} # type: Dict[str, QualityNode]
-
- # For quality_changes lookup
- self._machine_quality_type_to_quality_changes_dict = {} # type: Dict[str, QualityNode]
-
- self._default_machine_definition_id = "fdmprinter"
-
- self._container_registry.containerMetaDataChanged.connect(self._onContainerMetadataChanged)
- self._container_registry.containerAdded.connect(self._onContainerMetadataChanged)
- self._container_registry.containerRemoved.connect(self._onContainerMetadataChanged)
-
- # When a custom quality gets added/imported, there can be more than one InstanceContainers. In those cases,
- # we don't want to react on every container/metadata changed signal. The timer here is to buffer it a bit so
- # we don't react too many time.
- self._update_timer = QTimer(self)
- self._update_timer.setInterval(300)
- self._update_timer.setSingleShot(True)
- self._update_timer.timeout.connect(self._updateMaps)
-
- def initialize(self) -> None:
- # Initialize the lookup tree for quality profiles with following structure:
- # -> -> ->
- # ->
-
- self._machine_nozzle_buildplate_material_quality_type_to_quality_dict = {} # for quality lookup
- self._machine_quality_type_to_quality_changes_dict = {} # for quality_changes lookup
-
- quality_metadata_list = self._container_registry.findContainersMetadata(type = "quality")
- for metadata in quality_metadata_list:
- if metadata["id"] == "empty_quality":
- continue
-
- definition_id = metadata["definition"]
- quality_type = metadata["quality_type"]
-
- root_material_id = metadata.get("material")
- nozzle_name = metadata.get("variant")
- buildplate_name = metadata.get("buildplate")
- is_global_quality = metadata.get("global_quality", False)
- is_global_quality = is_global_quality or (root_material_id is None and nozzle_name is None and buildplate_name is None)
-
- # Sanity check: material+variant and is_global_quality cannot be present at the same time
- if is_global_quality and (root_material_id or nozzle_name):
- ConfigurationErrorMessage.getInstance().addFaultyContainers(metadata["id"])
- continue
-
- if definition_id not in self._machine_nozzle_buildplate_material_quality_type_to_quality_dict:
- self._machine_nozzle_buildplate_material_quality_type_to_quality_dict[definition_id] = QualityNode()
- machine_node = cast(QualityNode, self._machine_nozzle_buildplate_material_quality_type_to_quality_dict[definition_id])
-
- if is_global_quality:
- # For global qualities, save data in the machine node
- machine_node.addQualityMetadata(quality_type, metadata)
- continue
-
- current_node = machine_node
- intermediate_node_info_list = [nozzle_name, buildplate_name, root_material_id]
- current_intermediate_node_info_idx = 0
-
- while current_intermediate_node_info_idx < len(intermediate_node_info_list):
- node_name = intermediate_node_info_list[current_intermediate_node_info_idx]
- if node_name is not None:
- # There is specific information, update the current node to go deeper so we can add this quality
- # at the most specific branch in the lookup tree.
- if node_name not in current_node.children_map:
- current_node.children_map[node_name] = QualityNode()
- current_node = cast(QualityNode, current_node.children_map[node_name])
-
- current_intermediate_node_info_idx += 1
-
- current_node.addQualityMetadata(quality_type, metadata)
-
- # Initialize the lookup tree for quality_changes profiles with following structure:
- # -> ->
- quality_changes_metadata_list = self._container_registry.findContainersMetadata(type = "quality_changes")
- for metadata in quality_changes_metadata_list:
- if metadata["id"] == "empty_quality_changes":
- continue
-
- machine_definition_id = metadata["definition"]
- quality_type = metadata["quality_type"]
-
- if machine_definition_id not in self._machine_quality_type_to_quality_changes_dict:
- self._machine_quality_type_to_quality_changes_dict[machine_definition_id] = QualityNode()
- machine_node = self._machine_quality_type_to_quality_changes_dict[machine_definition_id]
- machine_node.addQualityChangesMetadata(quality_type, metadata)
-
- Logger.log("d", "Lookup tables updated.")
- self.qualitiesUpdated.emit()
-
- def _updateMaps(self) -> None:
- self.initialize()
-
- def _onContainerMetadataChanged(self, container: InstanceContainer) -> None:
- self._onContainerChanged(container)
-
- def _onContainerChanged(self, container: InstanceContainer) -> None:
- container_type = container.getMetaDataEntry("type")
- if container_type not in ("quality", "quality_changes"):
- return
-
- # update the cache table
- self._update_timer.start()
-
- # Updates the given quality groups' availabilities according to which extruders are being used/ enabled.
- def _updateQualityGroupsAvailability(self, machine: "GlobalStack", quality_group_list) -> None:
- used_extruders = set()
- for i in range(machine.getProperty("machine_extruder_count", "value")):
- try:
- extruder = machine.extruderList[int(i)]
- except IndexError:
- pass
- else:
- if extruder.isEnabled:
- used_extruders.add(str(i))
-
- # Update the "is_available" flag for each quality group.
- for quality_group in quality_group_list:
- is_available = True
- if quality_group.node_for_global is None:
- is_available = False
- if is_available:
- for position in used_extruders:
- if position not in quality_group.nodes_for_extruders:
- is_available = False
- break
-
- quality_group.is_available = is_available
-
- # Returns a dict of "custom profile name" -> QualityChangesGroup
- def getQualityChangesGroups(self, machine: "GlobalStack") -> dict:
- machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition)
-
- machine_node = self._machine_quality_type_to_quality_changes_dict.get(machine_definition_id)
- if not machine_node:
- Logger.log("i", "Cannot find node for machine def [%s] in QualityChanges lookup table", machine_definition_id)
- return dict()
-
- # Update availability for each QualityChangesGroup:
- # A custom profile is always available as long as the quality_type it's based on is available
- quality_group_dict = self.getQualityGroups(machine)
- available_quality_type_list = [qt for qt, qg in quality_group_dict.items() if qg.is_available]
-
- # Iterate over all quality_types in the machine node
- quality_changes_group_dict = dict()
- for quality_type, quality_changes_node in machine_node.quality_type_map.items():
- for quality_changes_name, quality_changes_group in quality_changes_node.children_map.items():
- quality_changes_group_dict[quality_changes_name] = quality_changes_group
- quality_changes_group.is_available = quality_type in available_quality_type_list
-
- return quality_changes_group_dict
-
- #
- # Gets all quality groups for the given machine. Both available and none available ones will be included.
- # It returns a dictionary with "quality_type"s as keys and "QualityGroup"s as values.
- # Whether a QualityGroup is available can be unknown via the field QualityGroup.is_available.
- # For more details, see QualityGroup.
- #
- def getQualityGroups(self, machine: "GlobalStack") -> Dict[str, QualityGroup]:
- machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition)
-
- # To find the quality container for the GlobalStack, check in the following fall-back manner:
- # (1) the machine-specific node
- # (2) the generic node
- machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(machine_definition_id)
-
- # Check if this machine has specific quality profiles for its extruders, if so, when looking up extruder
- # qualities, we should not fall back to use the global qualities.
- has_extruder_specific_qualities = False
- if machine_node:
- if machine_node.children_map:
- has_extruder_specific_qualities = True
-
- default_machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(self._default_machine_definition_id)
-
- nodes_to_check = [] # type: List[QualityNode]
- if machine_node is not None:
- nodes_to_check.append(machine_node)
- if default_machine_node is not None:
- nodes_to_check.append(default_machine_node)
-
- # Iterate over all quality_types in the machine node
- quality_group_dict = {}
- for node in nodes_to_check:
- if node and node.quality_type_map:
- quality_node = list(node.quality_type_map.values())[0]
- is_global_quality = parseBool(quality_node.getMetaDataEntry("global_quality", False))
- if not is_global_quality:
- continue
-
- for quality_type, quality_node in node.quality_type_map.items():
- quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type)
- quality_group.setGlobalNode(quality_node)
- quality_group_dict[quality_type] = quality_group
- break
-
- buildplate_name = machine.getBuildplateName()
-
- # Iterate over all extruders to find quality containers for each extruder
- for position, extruder in machine.extruders.items():
- nozzle_name = None
- if extruder.variant.getId() != "empty_variant":
- nozzle_name = extruder.variant.getName()
-
- # This is a list of root material IDs to use for searching for suitable quality profiles.
- # The root material IDs in this list are in prioritized order.
- root_material_id_list = []
- has_material = False # flag indicating whether this extruder has a material assigned
- root_material_id = None
- if extruder.material.getId() != "empty_material":
- has_material = True
- root_material_id = extruder.material.getMetaDataEntry("base_file")
- # Convert possible generic_pla_175 -> generic_pla
- root_material_id = self._material_manager.getRootMaterialIDWithoutDiameter(root_material_id)
- root_material_id_list.append(root_material_id)
-
- # Also try to get the fallback materials
- fallback_ids = self._material_manager.getFallBackMaterialIdsByMaterial(extruder.material)
-
- if fallback_ids:
- root_material_id_list.extend(fallback_ids)
-
- # Weed out duplicates while preserving the order.
- seen = set() # type: Set[str]
- root_material_id_list = [x for x in root_material_id_list if x not in seen and not seen.add(x)] # type: ignore
-
- # Here we construct a list of nodes we want to look for qualities with the highest priority first.
- # The use case is that, when we look for qualities for a machine, we first want to search in the following
- # order:
- # 1. machine-nozzle-buildplate-and-material-specific qualities if exist
- # 2. machine-nozzle-and-material-specific qualities if exist
- # 3. machine-nozzle-specific qualities if exist
- # 4. machine-material-specific qualities if exist
- # 5. machine-specific global qualities if exist, otherwise generic global qualities
- # NOTE: We DO NOT fail back to generic global qualities if machine-specific global qualities exist.
- # This is because when a machine defines its own global qualities such as Normal, Fine, etc.,
- # it is intended to maintain those specific qualities ONLY. If we still fail back to the generic
- # global qualities, there can be unimplemented quality types e.g. "coarse", and this is not
- # correct.
- # Each points above can be represented as a node in the lookup tree, so here we simply put those nodes into
- # the list with priorities as the order. Later, we just need to loop over each node in this list and fetch
- # qualities from there.
- node_info_list_0 = [nozzle_name, buildplate_name, root_material_id] # type: List[Optional[str]]
- nodes_to_check = []
-
- # This function tries to recursively find the deepest (the most specific) branch and add those nodes to
- # the search list in the order described above. So, by iterating over that search node list, we first look
- # in the more specific branches and then the less specific (generic) ones.
- def addNodesToCheck(node: Optional[QualityNode], nodes_to_check_list: List[QualityNode], node_info_list, node_info_idx: int) -> None:
- if node is None:
- return
-
- if node_info_idx < len(node_info_list):
- node_name = node_info_list[node_info_idx]
- if node_name is not None:
- current_node = node.getChildNode(node_name)
- if current_node is not None and has_material:
- addNodesToCheck(current_node, nodes_to_check_list, node_info_list, node_info_idx + 1)
-
- if has_material:
- for rmid in root_material_id_list:
- material_node = node.getChildNode(rmid)
- if material_node:
- nodes_to_check_list.append(material_node)
- break
-
- nodes_to_check_list.append(node)
-
- addNodesToCheck(machine_node, nodes_to_check, node_info_list_0, 0)
-
- # The last fall back will be the global qualities (either from the machine-specific node or the generic
- # node), but we only use one. For details see the overview comments above.
-
- if machine_node is not None and machine_node.quality_type_map:
- nodes_to_check += [machine_node]
- elif default_machine_node is not None:
- nodes_to_check += [default_machine_node]
-
- for node_idx, node in enumerate(nodes_to_check):
- if node and node.quality_type_map:
- if has_extruder_specific_qualities:
- # Only include variant qualities; skip non global qualities
- quality_node = list(node.quality_type_map.values())[0]
- is_global_quality = parseBool(quality_node.getMetaDataEntry("global_quality", False))
- if is_global_quality:
- continue
-
- for quality_type, quality_node in node.quality_type_map.items():
- if quality_type not in quality_group_dict:
- quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type)
- quality_group_dict[quality_type] = quality_group
-
- quality_group = quality_group_dict[quality_type]
- if position not in quality_group.nodes_for_extruders:
- quality_group.setExtruderNode(position, quality_node)
-
- # If the machine has its own specific qualities, for extruders, it should skip the global qualities
- # and use the material/variant specific qualities.
- if has_extruder_specific_qualities:
- if node_idx == len(nodes_to_check) - 1:
- break
-
- # Update availabilities for each quality group
- self._updateQualityGroupsAvailability(machine, quality_group_dict.values())
-
- return quality_group_dict
-
- def getQualityGroupsForMachineDefinition(self, machine: "GlobalStack") -> Dict[str, QualityGroup]:
- machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition)
-
- # To find the quality container for the GlobalStack, check in the following fall-back manner:
- # (1) the machine-specific node
- # (2) the generic node
- machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(machine_definition_id)
- default_machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(
- self._default_machine_definition_id)
- nodes_to_check = [machine_node, default_machine_node]
-
- # Iterate over all quality_types in the machine node
- quality_group_dict = dict()
- for node in nodes_to_check:
- if node and node.quality_type_map:
- for quality_type, quality_node in node.quality_type_map.items():
- quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type)
- quality_group.setGlobalNode(quality_node)
- quality_group_dict[quality_type] = quality_group
- break
-
- return quality_group_dict
-
- def getDefaultQualityType(self, machine: "GlobalStack") -> Optional[QualityGroup]:
- preferred_quality_type = machine.definition.getMetaDataEntry("preferred_quality_type")
- quality_group_dict = self.getQualityGroups(machine)
- quality_group = quality_group_dict.get(preferred_quality_type)
- return quality_group
-
-
- #
- # Methods for GUI
- #
-
- #
- # Remove the given quality changes group.
- #
- @pyqtSlot(QObject)
- def removeQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup") -> None:
- Logger.log("i", "Removing quality changes group [%s]", quality_changes_group.name)
- removed_quality_changes_ids = set()
- for node in quality_changes_group.getAllNodes():
- container_id = node.getMetaDataEntry("id")
- self._container_registry.removeContainer(container_id)
- removed_quality_changes_ids.add(container_id)
-
- # Reset all machines that have activated this quality changes to empty.
- for global_stack in self._container_registry.findContainerStacks(type = "machine"):
- if global_stack.qualityChanges.getId() in removed_quality_changes_ids:
- global_stack.qualityChanges = self._empty_quality_changes_container
- for extruder_stack in self._container_registry.findContainerStacks(type = "extruder_train"):
- if extruder_stack.qualityChanges.getId() in removed_quality_changes_ids:
- extruder_stack.qualityChanges = self._empty_quality_changes_container
-
- #
- # Rename a set of quality changes containers. Returns the new name.
- #
- @pyqtSlot(QObject, str, result = str)
- def renameQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup", new_name: str) -> str:
- Logger.log("i", "Renaming QualityChangesGroup[%s] to [%s]", quality_changes_group.name, new_name)
- if new_name == quality_changes_group.name:
- Logger.log("i", "QualityChangesGroup name [%s] unchanged.", quality_changes_group.name)
- return new_name
-
- new_name = self._container_registry.uniqueName(new_name)
- for node in quality_changes_group.getAllNodes():
- container = node.getContainer()
- if container:
- container.setName(new_name)
-
- quality_changes_group.name = new_name
-
- self._application.getMachineManager().activeQualityChanged.emit()
- self._application.getMachineManager().activeQualityGroupChanged.emit()
-
- return new_name
-
- #
- # Duplicates the given quality.
- #
- @pyqtSlot(str, "QVariantMap")
- def duplicateQualityChanges(self, quality_changes_name: str, quality_model_item) -> None:
- global_stack = self._application.getGlobalContainerStack()
- if not global_stack:
- Logger.log("i", "No active global stack, cannot duplicate quality changes.")
- return
-
- quality_group = quality_model_item["quality_group"]
- quality_changes_group = quality_model_item["quality_changes_group"]
- if quality_changes_group is None:
- # create global quality changes only
- new_name = self._container_registry.uniqueName(quality_changes_name)
- new_quality_changes = self._createQualityChanges(quality_group.quality_type, new_name,
- global_stack, None)
- self._container_registry.addContainer(new_quality_changes)
- else:
- new_name = self._container_registry.uniqueName(quality_changes_name)
- for node in quality_changes_group.getAllNodes():
- container = node.getContainer()
- if not container:
- continue
- new_id = self._container_registry.uniqueName(container.getId())
- self._container_registry.addContainer(container.duplicate(new_id, new_name))
-
- ## Create quality changes containers from the user containers in the active stacks.
- #
- # This will go through the global and extruder stacks and create quality_changes containers from
- # the user containers in each stack. These then replace the quality_changes containers in the
- # stack and clear the user settings.
- @pyqtSlot(str)
- def createQualityChanges(self, base_name: str) -> None:
- machine_manager = self._application.getMachineManager()
-
- global_stack = machine_manager.activeMachine
- if not global_stack:
- return
-
- active_quality_name = machine_manager.activeQualityOrQualityChangesName
- if active_quality_name == "":
- Logger.log("w", "No quality container found in stack %s, cannot create profile", global_stack.getId())
- return
-
- machine_manager.blurSettings.emit()
- if base_name is None or base_name == "":
- base_name = active_quality_name
- unique_name = self._container_registry.uniqueName(base_name)
-
- # Go through the active stacks and create quality_changes containers from the user containers.
- stack_list = [global_stack] + list(global_stack.extruders.values())
- for stack in stack_list:
- user_container = stack.userChanges
- quality_container = stack.quality
- quality_changes_container = stack.qualityChanges
- if not quality_container or not quality_changes_container:
- Logger.log("w", "No quality or quality changes container found in stack %s, ignoring it", stack.getId())
- continue
-
- quality_type = quality_container.getMetaDataEntry("quality_type")
- extruder_stack = None
- if isinstance(stack, ExtruderStack):
- extruder_stack = stack
- new_changes = self._createQualityChanges(quality_type, unique_name, global_stack, extruder_stack)
- from cura.Settings.ContainerManager import ContainerManager
- ContainerManager.getInstance()._performMerge(new_changes, quality_changes_container, clear_settings = False)
- ContainerManager.getInstance()._performMerge(new_changes, user_container)
-
- self._container_registry.addContainer(new_changes)
-
- #
- # Create a quality changes container with the given setup.
- #
- def _createQualityChanges(self, quality_type: str, new_name: str, machine: "GlobalStack",
- extruder_stack: Optional["ExtruderStack"]) -> "InstanceContainer":
- base_id = machine.definition.getId() if extruder_stack is None else extruder_stack.getId()
- new_id = base_id + "_" + new_name
- new_id = new_id.lower().replace(" ", "_")
- new_id = self._container_registry.uniqueName(new_id)
-
- # Create a new quality_changes container for the quality.
- quality_changes = InstanceContainer(new_id)
- quality_changes.setName(new_name)
- quality_changes.setMetaDataEntry("type", "quality_changes")
- quality_changes.setMetaDataEntry("quality_type", quality_type)
-
- # If we are creating a container for an extruder, ensure we add that to the container
- if extruder_stack is not None:
- quality_changes.setMetaDataEntry("position", extruder_stack.getMetaDataEntry("position"))
-
- # If the machine specifies qualities should be filtered, ensure we match the current criteria.
- machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition)
- quality_changes.setDefinition(machine_definition_id)
-
- quality_changes.setMetaDataEntry("setting_version", self._application.SettingVersion)
- return quality_changes
-
-
-#
-# Gets the machine definition ID that can be used to search for Quality containers that are suitable for the given
-# machine. The rule is as follows:
-# 1. By default, the machine definition ID for quality container search will be "fdmprinter", which is the generic
-# machine.
-# 2. If a machine has its own machine quality (with "has_machine_quality = True"), we should use the given machine's
-# own machine definition ID for quality search.
-# Example: for an Ultimaker 3, the definition ID should be "ultimaker3".
-# 3. When condition (2) is met, AND the machine has "quality_definition" defined in its definition file, then the
-# definition ID specified in "quality_definition" should be used.
-# Example: for an Ultimaker 3 Extended, it has "quality_definition = ultimaker3". This means Ultimaker 3 Extended
-# shares the same set of qualities profiles as Ultimaker 3.
-#
-def getMachineDefinitionIDForQualitySearch(machine_definition: "DefinitionContainerInterface",
- default_definition_id: str = "fdmprinter") -> str:
- machine_definition_id = default_definition_id
- if parseBool(machine_definition.getMetaDataEntry("has_machine_quality", False)):
- # Only use the machine's own quality definition ID if this machine has machine quality.
- machine_definition_id = machine_definition.getMetaDataEntry("quality_definition")
- if machine_definition_id is None:
- machine_definition_id = machine_definition.getId()
-
- return machine_definition_id
diff --git a/cura/Machines/QualityNode.py b/cura/Machines/QualityNode.py
index 991388a4bd..45cd898db5 100644
--- a/cura/Machines/QualityNode.py
+++ b/cura/Machines/QualityNode.py
@@ -1,38 +1,44 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional, Dict, cast, Any
+from typing import Union, TYPE_CHECKING
-from .ContainerNode import ContainerNode
-from .QualityChangesGroup import QualityChangesGroup
+from UM.Settings.ContainerRegistry import ContainerRegistry
+from cura.Machines.ContainerNode import ContainerNode
+from cura.Machines.IntentNode import IntentNode
+import UM.FlameProfiler
+if TYPE_CHECKING:
+ from typing import Dict
+ from cura.Machines.MaterialNode import MaterialNode
+ from cura.Machines.MachineNode import MachineNode
+## Represents a quality profile in the container tree.
#
-# QualityNode is used for BOTH quality and quality_changes containers.
+# This may either be a normal quality profile or a global quality profile.
#
+# Its subcontainers are intent profiles.
class QualityNode(ContainerNode):
+ def __init__(self, container_id: str, parent: Union["MaterialNode", "MachineNode"]) -> None:
+ super().__init__(container_id)
+ self.parent = parent
+ self.intents = {} # type: Dict[str, IntentNode]
- def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None:
- super().__init__(metadata = metadata)
- self.quality_type_map = {} # type: Dict[str, QualityNode] # quality_type -> QualityNode for InstanceContainer
+ my_metadata = ContainerRegistry.getInstance().findContainersMetadata(id = container_id)[0]
+ self.quality_type = my_metadata["quality_type"]
+ # The material type of the parent doesn't need to be the same as this due to generic fallbacks.
+ self._material = my_metadata.get("material")
+ self._loadAll()
- def getChildNode(self, child_key: str) -> Optional["QualityNode"]:
- return self.children_map.get(child_key)
+ @UM.FlameProfiler.profile
+ def _loadAll(self) -> None:
+ container_registry = ContainerRegistry.getInstance()
- def addQualityMetadata(self, quality_type: str, metadata: Dict[str, Any]):
- if quality_type not in self.quality_type_map:
- self.quality_type_map[quality_type] = QualityNode(metadata)
+ # Find all intent profiles that fit the current configuration.
+ from cura.Machines.MachineNode import MachineNode
+ if not isinstance(self.parent, MachineNode): # Not a global profile.
+ for intent in container_registry.findInstanceContainersMetadata(type = "intent", definition = self.parent.variant.machine.quality_definition, variant = self.parent.variant.variant_name, material = self._material, quality_type = self.quality_type):
+ self.intents[intent["id"]] = IntentNode(intent["id"], quality = self)
- def getQualityNode(self, quality_type: str) -> Optional["QualityNode"]:
- return self.quality_type_map.get(quality_type)
-
- def addQualityChangesMetadata(self, quality_type: str, metadata: Dict[str, Any]):
- if quality_type not in self.quality_type_map:
- self.quality_type_map[quality_type] = QualityNode()
- quality_type_node = self.quality_type_map[quality_type]
-
- name = metadata["name"]
- if name not in quality_type_node.children_map:
- quality_type_node.children_map[name] = QualityChangesGroup(name, quality_type)
- quality_changes_group = quality_type_node.children_map[name]
- cast(QualityChangesGroup, quality_changes_group).addNode(QualityNode(metadata))
+ self.intents["empty_intent"] = IntentNode("empty_intent", quality = self)
+ # Otherwise, there are no intents for global profiles.
\ No newline at end of file
diff --git a/cura/Machines/VariantManager.py b/cura/Machines/VariantManager.py
deleted file mode 100644
index 55c008ff40..0000000000
--- a/cura/Machines/VariantManager.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# Copyright (c) 2018 Ultimaker B.V.
-# Cura is released under the terms of the LGPLv3 or higher.
-
-from collections import OrderedDict
-from typing import Optional, TYPE_CHECKING, Dict
-
-from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
-from UM.Logger import Logger
-from UM.Settings.ContainerRegistry import ContainerRegistry
-from UM.Util import parseBool
-
-from cura.Machines.ContainerNode import ContainerNode
-from cura.Machines.VariantType import VariantType, ALL_VARIANT_TYPES
-from cura.Settings.GlobalStack import GlobalStack
-
-if TYPE_CHECKING:
- from UM.Settings.DefinitionContainer import DefinitionContainer
-
-
-#
-# VariantManager is THE place to look for a specific variant. It maintains two variant lookup tables with the following
-# structure:
-#
-# [machine_definition_id] -> [variant_type] -> [variant_name] -> ContainerNode(metadata / container)
-# Example: "ultimaker3" -> "buildplate" -> "Glass" (if present) -> ContainerNode
-# -> ...
-# -> "nozzle" -> "AA 0.4"
-# -> "BB 0.8"
-# -> ...
-#
-# [machine_definition_id] -> [machine_buildplate_type] -> ContainerNode(metadata / container)
-# Example: "ultimaker3" -> "glass" (this is different from the variant name) -> ContainerNode
-#
-# Note that the "container" field is not loaded in the beginning because it would defeat the purpose of lazy-loading.
-# A container is loaded when getVariant() is called to load a variant InstanceContainer.
-#
-class VariantManager:
-
- def __init__(self, container_registry: ContainerRegistry) -> None:
- self._container_registry = container_registry
-
- self._machine_to_variant_dict_map = dict() # type: Dict[str, Dict["VariantType", Dict[str, ContainerNode]]]
- self._machine_to_buildplate_dict_map = dict() # type: Dict[str, Dict[str, ContainerNode]]
-
- self._exclude_variant_id_list = ["empty_variant"]
-
- #
- # Initializes the VariantManager including:
- # - initializing the variant lookup table based on the metadata in ContainerRegistry.
- #
- def initialize(self) -> None:
- self._machine_to_variant_dict_map = OrderedDict()
- self._machine_to_buildplate_dict_map = OrderedDict()
-
- # Cache all variants from the container registry to a variant map for better searching and organization.
- variant_metadata_list = self._container_registry.findContainersMetadata(type = "variant")
- for variant_metadata in variant_metadata_list:
- if variant_metadata["id"] in self._exclude_variant_id_list:
- Logger.log("d", "Exclude variant [%s]", variant_metadata["id"])
- continue
-
- variant_name = variant_metadata["name"]
- variant_definition = variant_metadata["definition"]
- if variant_definition not in self._machine_to_variant_dict_map:
- self._machine_to_variant_dict_map[variant_definition] = OrderedDict()
- for variant_type in ALL_VARIANT_TYPES:
- self._machine_to_variant_dict_map[variant_definition][variant_type] = dict()
-
- try:
- variant_type = variant_metadata["hardware_type"]
- except KeyError:
- Logger.log("w", "Variant %s does not specify a hardware_type; assuming 'nozzle'", variant_metadata["id"])
- variant_type = VariantType.NOZZLE
- variant_type = VariantType(variant_type)
- variant_dict = self._machine_to_variant_dict_map[variant_definition][variant_type]
- if variant_name in variant_dict:
- # ERROR: duplicated variant name.
- ConfigurationErrorMessage.getInstance().addFaultyContainers(variant_metadata["id"])
- continue #Then ignore this variant. This now chooses one of the two variants arbitrarily and deletes the other one! No guarantees!
-
- variant_dict[variant_name] = ContainerNode(metadata = variant_metadata)
-
- # If the variant is a buildplate then fill also the buildplate map
- if variant_type == VariantType.BUILD_PLATE:
- if variant_definition not in self._machine_to_buildplate_dict_map:
- self._machine_to_buildplate_dict_map[variant_definition] = OrderedDict()
-
- try:
- variant_container = self._container_registry.findContainers(type = "variant", id = variant_metadata["id"])[0]
- except IndexError as e:
- # It still needs to break, but we want to know what variant ID made it break.
- msg = "Unable to find build plate variant with the id [%s]" % variant_metadata["id"]
- Logger.logException("e", msg)
- raise IndexError(msg)
-
- buildplate_type = variant_container.getProperty("machine_buildplate_type", "value")
- if buildplate_type not in self._machine_to_buildplate_dict_map[variant_definition]:
- self._machine_to_variant_dict_map[variant_definition][buildplate_type] = dict()
-
- self._machine_to_buildplate_dict_map[variant_definition][buildplate_type] = variant_dict[variant_name]
-
- #
- # Gets the variant InstanceContainer with the given information.
- # Almost the same as getVariantMetadata() except that this returns an InstanceContainer if present.
- #
- def getVariantNode(self, machine_definition_id: str, variant_name: str,
- variant_type: Optional["VariantType"] = None) -> Optional["ContainerNode"]:
- if variant_type is None:
- variant_node = None
- variant_type_dict = self._machine_to_variant_dict_map[machine_definition_id]
- for variant_dict in variant_type_dict.values():
- if variant_name in variant_dict:
- variant_node = variant_dict[variant_name]
- break
- return variant_node
-
- return self._machine_to_variant_dict_map.get(machine_definition_id, {}).get(variant_type, {}).get(variant_name)
-
- def getVariantNodes(self, machine: "GlobalStack", variant_type: "VariantType") -> Dict[str, ContainerNode]:
- machine_definition_id = machine.definition.getId()
- return self._machine_to_variant_dict_map.get(machine_definition_id, {}).get(variant_type, {})
-
- #
- # Gets the default variant for the given machine definition.
- # If the optional GlobalStack is given, the metadata information will be fetched from the GlobalStack instead of
- # the DefinitionContainer. Because for machines such as UM2, you can enable Olsson Block, which will set
- # "has_variants" to True in the GlobalStack. In those cases, we need to fetch metadata from the GlobalStack or
- # it may not be correct.
- #
- def getDefaultVariantNode(self, machine_definition: "DefinitionContainer",
- variant_type: "VariantType",
- global_stack: Optional["GlobalStack"] = None) -> Optional["ContainerNode"]:
- machine_definition_id = machine_definition.getId()
- container_for_metadata_fetching = global_stack if global_stack is not None else machine_definition
-
- preferred_variant_name = None
- if variant_type == VariantType.BUILD_PLATE:
- if parseBool(container_for_metadata_fetching.getMetaDataEntry("has_variant_buildplates", False)):
- preferred_variant_name = container_for_metadata_fetching.getMetaDataEntry("preferred_variant_buildplate_name")
- else:
- if parseBool(container_for_metadata_fetching.getMetaDataEntry("has_variants", False)):
- preferred_variant_name = container_for_metadata_fetching.getMetaDataEntry("preferred_variant_name")
-
- node = None
- if preferred_variant_name:
- node = self.getVariantNode(machine_definition_id, preferred_variant_name, variant_type)
- return node
-
- def getBuildplateVariantNode(self, machine_definition_id: str, buildplate_type: str) -> Optional["ContainerNode"]:
- if machine_definition_id in self._machine_to_buildplate_dict_map:
- return self._machine_to_buildplate_dict_map[machine_definition_id].get(buildplate_type)
- return None
diff --git a/cura/Machines/VariantNode.py b/cura/Machines/VariantNode.py
new file mode 100644
index 0000000000..c9e3ec4913
--- /dev/null
+++ b/cura/Machines/VariantNode.py
@@ -0,0 +1,182 @@
+# Copyright (c) 2019 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+from typing import TYPE_CHECKING
+
+from UM.Logger import Logger
+from UM.Settings.ContainerRegistry import ContainerRegistry
+from UM.Settings.Interfaces import ContainerInterface
+from UM.Signal import Signal
+
+from cura.Machines.ContainerNode import ContainerNode
+from cura.Machines.MaterialNode import MaterialNode
+
+import UM.FlameProfiler
+
+if TYPE_CHECKING:
+ from typing import Dict
+ from cura.Machines.MachineNode import MachineNode
+
+
+## This class represents an extruder variant in the container tree.
+#
+# The subnodes of these nodes are materials.
+#
+# This node contains materials with ALL filament diameters underneath it. The
+# tree of this variant is not specific to one global stack, so because the
+# list of materials can be different per stack depending on the compatible
+# material diameter setting, we cannot filter them here. Filtering must be
+# done in the model.
+class VariantNode(ContainerNode):
+ def __init__(self, container_id: str, machine: "MachineNode") -> None:
+ super().__init__(container_id)
+ self.machine = machine
+ self.materials = {} # type: Dict[str, MaterialNode] # Mapping material base files to their nodes.
+ self.materialsChanged = Signal()
+
+ container_registry = ContainerRegistry.getInstance()
+ self.variant_name = container_registry.findContainersMetadata(id = container_id)[0]["name"] # Store our own name so that we can filter more easily.
+ container_registry.containerAdded.connect(self._materialAdded)
+ container_registry.containerRemoved.connect(self._materialRemoved)
+ self._loadAll()
+
+ ## (Re)loads all materials under this variant.
+ @UM.FlameProfiler.profile
+ def _loadAll(self) -> None:
+ container_registry = ContainerRegistry.getInstance()
+
+ if not self.machine.has_materials:
+ self.materials["empty_material"] = MaterialNode("empty_material", variant = self)
+ return # There should not be any materials loaded for this printer.
+
+ # Find all the materials for this variant's name.
+ else: # Printer has its own material profiles. Look for material profiles with this printer's definition.
+ base_materials = container_registry.findInstanceContainersMetadata(type = "material", definition = "fdmprinter")
+ printer_specific_materials = container_registry.findInstanceContainersMetadata(type = "material", definition = self.machine.container_id, variant_name = None)
+ variant_specific_materials = container_registry.findInstanceContainersMetadata(type = "material", definition = self.machine.container_id, variant_name = self.variant_name) # If empty_variant, this won't return anything.
+ materials_per_base_file = {material["base_file"]: material for material in base_materials}
+ materials_per_base_file.update({material["base_file"]: material for material in printer_specific_materials}) # Printer-specific profiles override global ones.
+ materials_per_base_file.update({material["base_file"]: material for material in variant_specific_materials}) # Variant-specific profiles override all of those.
+ materials = list(materials_per_base_file.values())
+
+ # Filter materials based on the exclude_materials property.
+ filtered_materials = [material for material in materials if material["id"] not in self.machine.exclude_materials]
+
+ for material in filtered_materials:
+ base_file = material["base_file"]
+ if base_file not in self.materials:
+ self.materials[base_file] = MaterialNode(material["id"], variant = self)
+ self.materials[base_file].materialChanged.connect(self.materialsChanged)
+ if not self.materials:
+ self.materials["empty_material"] = MaterialNode("empty_material", variant = self)
+
+ ## Finds the preferred material for this printer with this nozzle in one of
+ # the extruders.
+ #
+ # If the preferred material is not available, an arbitrary material is
+ # returned. If there is a configuration mistake (like a typo in the
+ # preferred material) this returns a random available material. If there
+ # are no available materials, this will return the empty material node.
+ # \param approximate_diameter The desired approximate diameter of the
+ # material.
+ # \return The node for the preferred material, or any arbitrary material
+ # 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 == base_material and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")):
+ return material_node
+
+ # First fallback: Check if we should be checking for the 175 variant.
+ if approximate_diameter == 2:
+ preferred_material = self.machine.preferred_material + "_175"
+ for base_material, material_node in self.materials.items():
+ if preferred_material == base_material and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")):
+ return material_node
+
+ # Second fallback: Choose any material with matching diameter.
+ for material_node in self.materials.values():
+ if material_node.getMetaDataEntry("approximate_diameter") and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")):
+ Logger.log("w", "Could not find preferred material %s, falling back to whatever works", self.machine.preferred_material)
+ return material_node
+
+ fallback = next(iter(self.materials.values())) # Should only happen with empty material node.
+ Logger.log("w", "Could not find preferred material {preferred_material} with diameter {diameter} for variant {variant_id}, falling back to {fallback}.".format(
+ preferred_material = self.machine.preferred_material,
+ diameter = approximate_diameter,
+ variant_id = self.container_id,
+ fallback = fallback.container_id
+ ))
+ return fallback
+
+ ## When a material gets added to the set of profiles, we need to update our
+ # tree here.
+ @UM.FlameProfiler.profile
+ def _materialAdded(self, container: ContainerInterface) -> None:
+ if container.getMetaDataEntry("type") != "material":
+ return # Not interested.
+ if not ContainerRegistry.getInstance().findContainersMetadata(id = container.getId()):
+ # CURA-6889
+ # containerAdded and removed signals may be triggered in the next event cycle. If a container gets added
+ # and removed in the same event cycle, in the next cycle, the connections should just ignore the signals.
+ # The check here makes sure that the container in the signal still exists.
+ Logger.log("d", "Got container added signal for container [%s] but it no longer exists, do nothing.",
+ container.getId())
+ return
+ if not self.machine.has_materials:
+ return # We won't add any materials.
+ material_definition = container.getMetaDataEntry("definition")
+
+ base_file = container.getMetaDataEntry("base_file")
+ if base_file in self.machine.exclude_materials:
+ return # Material is forbidden for this printer.
+ if base_file not in self.materials: # Completely new base file. Always better than not having a file as long as it matches our set-up.
+ if material_definition != "fdmprinter" and material_definition != self.machine.container_id:
+ return
+ material_variant = container.getMetaDataEntry("variant_name")
+ if material_variant is not None and material_variant != self.variant_name:
+ return
+ else: # We already have this base profile. Replace the base profile if the new one is more specific.
+ new_definition = container.getMetaDataEntry("definition")
+ if new_definition == "fdmprinter":
+ return # Just as unspecific or worse.
+ material_variant = container.getMetaDataEntry("variant_name")
+ if new_definition != self.machine.container_id or material_variant != self.variant_name:
+ return # Doesn't match this set-up.
+ original_metadata = ContainerRegistry.getInstance().findContainersMetadata(id = self.materials[base_file].container_id)[0]
+ if "variant_name" in original_metadata or material_variant is None:
+ return # Original was already specific or just as unspecific as the new one.
+
+ if "empty_material" in self.materials:
+ del self.materials["empty_material"]
+ self.materials[base_file] = MaterialNode(container.getId(), variant = self)
+ self.materials[base_file].materialChanged.connect(self.materialsChanged)
+ self.materialsChanged.emit(self.materials[base_file])
+
+ @UM.FlameProfiler.profile
+ def _materialRemoved(self, container: ContainerInterface) -> None:
+ if container.getMetaDataEntry("type") != "material":
+ return # Only interested in materials.
+ base_file = container.getMetaDataEntry("base_file")
+ if base_file not in self.materials:
+ return # We don't track this material anyway. No need to remove it.
+
+ original_node = self.materials[base_file]
+ del self.materials[base_file]
+ self.materialsChanged.emit(original_node)
+
+ # Now a different material from the same base file may have been hidden because it was not as specific as the one we deleted.
+ # Search for any submaterials from that base file that are still left.
+ materials_same_base_file = ContainerRegistry.getInstance().findContainersMetadata(base_file = base_file)
+ if materials_same_base_file:
+ most_specific_submaterial = materials_same_base_file[0]
+ for submaterial in materials_same_base_file:
+ if submaterial["definition"] == self.machine.container_id:
+ if most_specific_submaterial["definition"] == "fdmprinter":
+ most_specific_submaterial = submaterial
+ if most_specific_submaterial.get("variant_name", "empty") == "empty" and submaterial.get("variant_name", "empty") == self.variant_name:
+ most_specific_submaterial = submaterial
+ self.materials[base_file] = MaterialNode(most_specific_submaterial["id"], variant = self)
+ self.materialsChanged.emit(self.materials[base_file])
+
+ if not self.materials: # The last available material just got deleted and there is nothing with the same base file to replace it.
+ self.materials["empty_material"] = MaterialNode("empty_material", variant = self)
+ self.materialsChanged.emit(self.materials["empty_material"])
\ No newline at end of file
diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
index 08309fa30e..9fc01ba50b 100644
--- a/cura/OAuth2/AuthorizationHelpers.py
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -99,7 +99,7 @@ class AuthorizationHelpers:
})
except requests.exceptions.ConnectionError:
# Connection was suddenly dropped. Nothing we can do about that.
- Logger.log("w", "Something failed while attempting to parse the JWT token")
+ Logger.logException("w", "Something failed while attempting to parse the JWT token")
return None
if token_request.status_code not in (200, 201):
Logger.log("w", "Could not retrieve token data from auth server: %s", token_request.text)
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index 68756f8df6..0848623410 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -3,7 +3,6 @@
import json
from datetime import datetime, timedelta
-import os
from typing import Optional, TYPE_CHECKING
from urllib.parse import urlencode
@@ -14,7 +13,6 @@ from PyQt5.QtGui import QDesktopServices
from UM.Logger import Logger
from UM.Message import Message
-from UM.Platform import Platform
from UM.Signal import Signal
from cura.OAuth2.LocalAuthorizationServer import LocalAuthorizationServer
diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py
index d084c0dbf4..a411478b16 100755
--- a/cura/PlatformPhysics.py
+++ b/cura/PlatformPhysics.py
@@ -17,6 +17,7 @@ from cura.Scene import ZOffsetDecorator
import random # used for list shuffling
+
class PlatformPhysics:
def __init__(self, controller, volume):
super().__init__()
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/ExtruderConfigurationModel.py b/cura/PrinterOutput/Models/ExtruderConfigurationModel.py
index 04a3c95afd..4a1cf4916f 100644
--- a/cura/PrinterOutput/Models/ExtruderConfigurationModel.py
+++ b/cura/PrinterOutput/Models/ExtruderConfigurationModel.py
@@ -25,9 +25,10 @@ class ExtruderConfigurationModel(QObject):
return self._position
def setMaterial(self, material: Optional[MaterialOutputModel]) -> None:
- if self._material != material:
- self._material = material
- self.extruderConfigurationChanged.emit()
+ if material is None or self._material == material:
+ return
+ self._material = material
+ self.extruderConfigurationChanged.emit()
@pyqtProperty(QObject, fset = setMaterial, notify = extruderConfigurationChanged)
def activeMaterial(self) -> Optional[MaterialOutputModel]:
diff --git a/cura/PrinterOutput/Models/MaterialOutputModel.py b/cura/PrinterOutput/Models/MaterialOutputModel.py
index 7a17ef3cce..3714824a89 100644
--- a/cura/PrinterOutput/Models/MaterialOutputModel.py
+++ b/cura/PrinterOutput/Models/MaterialOutputModel.py
@@ -34,3 +34,11 @@ class MaterialOutputModel(QObject):
@pyqtProperty(str, constant = True)
def name(self) -> str:
return self._name
+
+ def __eq__(self, other):
+ if self is other:
+ return True
+ if type(other) is not MaterialOutputModel:
+ return False
+
+ return self.guid == other.guid and self.type == other.type and self.brand == other.brand and self.color == other.color and self.name == other.name
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/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
index 392df7bded..60be5bc8f3 100644
--- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
+++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
@@ -154,7 +154,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
part = QHttpPart()
if not content_header.startswith("form-data;"):
- content_header = "form_data; " + content_header
+ content_header = "form-data; " + content_header
part.setHeader(QNetworkRequest.ContentDispositionHeader, content_header)
if content_type is not None:
diff --git a/cura/PrinterOutput/PrinterOutputDevice.py b/cura/PrinterOutput/PrinterOutputDevice.py
index 31daacbccc..b05e76ad2e 100644
--- a/cura/PrinterOutput/PrinterOutputDevice.py
+++ b/cura/PrinterOutput/PrinterOutputDevice.py
@@ -10,7 +10,6 @@ from UM.Logger import Logger
from UM.Signal import signalemitter
from UM.Qt.QtApplication import QtApplication
from UM.FlameProfiler import pyqtSlot
-from UM.Decorators import deprecated
from UM.i18n import i18nCatalog
from UM.OutputDevice.OutputDevice import OutputDevice
@@ -203,10 +202,6 @@ class PrinterOutputDevice(QObject, OutputDevice):
def acceptsCommands(self) -> bool:
return self._accepts_commands
- @deprecated("Please use the protected function instead", "3.2")
- def setAcceptsCommands(self, accepts_commands: bool) -> None:
- self._setAcceptsCommands(accepts_commands)
-
## Set a flag to signal the UI that the printer is not (yet) ready to receive commands
def _setAcceptsCommands(self, accepts_commands: bool) -> None:
if self._accepts_commands != accepts_commands:
@@ -225,7 +220,10 @@ class PrinterOutputDevice(QObject, OutputDevice):
if printer.printerConfiguration is not None and printer.printerConfiguration.hasAnyMaterialLoaded():
all_configurations.add(printer.printerConfiguration)
all_configurations.update(printer.availableConfigurations)
- new_configurations = sorted(all_configurations, key = lambda config: config.printerType)
+ 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
self.uniqueConfigurationsChanged.emit()
@@ -233,7 +231,7 @@ class PrinterOutputDevice(QObject, OutputDevice):
# Returns the unique configurations of the printers within this output device
@pyqtProperty("QStringList", notify = uniqueConfigurationsChanged)
def uniquePrinterTypes(self) -> List[str]:
- return list(sorted(set([configuration.printerType for configuration in self._unique_configurations])))
+ return list(sorted(set([configuration.printerType or "" for configuration in self._unique_configurations])))
def _onPrintersChanged(self) -> None:
for printer in self._printers:
diff --git a/cura/Scene/BuildPlateDecorator.py b/cura/Scene/BuildPlateDecorator.py
index dfb465b7ad..cff9f88f62 100644
--- a/cura/Scene/BuildPlateDecorator.py
+++ b/cura/Scene/BuildPlateDecorator.py
@@ -4,12 +4,12 @@ from cura.Scene.CuraSceneNode import CuraSceneNode
## Make a SceneNode build plate aware CuraSceneNode objects all have this decorator.
class BuildPlateDecorator(SceneNodeDecorator):
- def __init__(self, build_plate_number = -1):
+ def __init__(self, build_plate_number: int = -1) -> None:
super().__init__()
- self._build_plate_number = None
+ self._build_plate_number = build_plate_number
self.setBuildPlateNumber(build_plate_number)
- def setBuildPlateNumber(self, nr):
+ def setBuildPlateNumber(self, nr: int) -> None:
# Make sure that groups are set correctly
# setBuildPlateForSelection in CuraActions makes sure that no single childs are set.
self._build_plate_number = nr
@@ -19,7 +19,7 @@ class BuildPlateDecorator(SceneNodeDecorator):
for child in self._node.getChildren():
child.callDecoration("setBuildPlateNumber", nr)
- def getBuildPlateNumber(self):
+ def getBuildPlateNumber(self) -> int:
return self._build_plate_number
def __deepcopy__(self, memo):
diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py
index 72e95c9299..2a160f6069 100644
--- a/cura/Scene/ConvexHullDecorator.py
+++ b/cura/Scene/ConvexHullDecorator.py
@@ -88,27 +88,34 @@ class ConvexHullDecorator(SceneNodeDecorator):
return self._add2DAdhesionMargin(hull)
- ## Get the unmodified 2D projected convex hull with 2D adhesion area of the node (if any)
+ ## Get the unmodified 2D projected convex hull of the node (if any)
+ # In case of one-at-a-time, this includes adhesion and head+fans clearance
def getConvexHull(self) -> Optional[Polygon]:
if self._node is None:
return None
if self._node.callDecoration("isNonPrintingMesh"):
return None
- hull = self._compute2DConvexHull()
- if self._global_stack and self._node is not None and hull is not None:
- # Parent can be None if node is just loaded.
- if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node):
- hull = hull.getMinkowskiHull(Polygon(numpy.array(self._global_stack.getProperty("machine_head_polygon", "value"), numpy.float32)))
- hull = self._add2DAdhesionMargin(hull)
- return hull
+ # Parent can be None if node is just loaded.
+ if self._isSingularOneAtATimeNode():
+ hull = self.getConvexHullHeadFull()
+ if hull is None:
+ return None
+ hull = self._add2DAdhesionMargin(hull)
+ return hull
- ## Get the convex hull of the node with the full head size
+ return self._compute2DConvexHull()
+
+ ## For one at the time this is the convex hull of the node with the full head size
+ # In case of printing all at once this is None.
def getConvexHullHeadFull(self) -> Optional[Polygon]:
if self._node is None:
return None
- return self._compute2DConvexHeadFull()
+ if self._isSingularOneAtATimeNode():
+ return self._compute2DConvexHeadFull()
+
+ return None
@staticmethod
def hasGroupAsParent(node: "SceneNode") -> bool:
@@ -118,38 +125,47 @@ class ConvexHullDecorator(SceneNodeDecorator):
return bool(parent.callDecoration("isGroup"))
## Get convex hull of the object + head size
- # In case of printing all at once this is the same as the convex hull.
+ # In case of printing all at once this is None.
# For one at the time this is area with intersection of mirrored head
def getConvexHullHead(self) -> Optional[Polygon]:
if self._node is None:
return None
if self._node.callDecoration("isNonPrintingMesh"):
return None
- if self._global_stack:
- if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node):
- head_with_fans = self._compute2DConvexHeadMin()
- if head_with_fans is None:
- return None
- head_with_fans_with_adhesion_margin = self._add2DAdhesionMargin(head_with_fans)
- return head_with_fans_with_adhesion_margin
+ if self._isSingularOneAtATimeNode():
+ head_with_fans = self._compute2DConvexHeadMin()
+ if head_with_fans is None:
+ return None
+ head_with_fans_with_adhesion_margin = self._add2DAdhesionMargin(head_with_fans)
+ return head_with_fans_with_adhesion_margin
return None
## Get convex hull of the node
- # In case of printing all at once this is the same as the convex hull.
+ # In case of printing all at once this None??
# For one at the time this is the area without the head.
def getConvexHullBoundary(self) -> Optional[Polygon]:
if self._node is None:
return None
-
+
if self._node.callDecoration("isNonPrintingMesh"):
return None
- if self._global_stack:
- if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node):
- # Printing one at a time and it's not an object in a group
- return self._compute2DConvexHull()
+ if self._isSingularOneAtATimeNode():
+ # Printing one at a time and it's not an object in a group
+ return self._compute2DConvexHull()
return None
+ ## Get the buildplate polygon where will be printed
+ # In case of printing all at once this is the same as convex hull (no individual adhesion)
+ # For one at the time this includes the adhesion area
+ def getPrintingArea(self) -> Optional[Polygon]:
+ if self._isSingularOneAtATimeNode():
+ # In one-at-a-time mode, every printed object gets it's own adhesion
+ printing_area = self.getAdhesionArea()
+ else:
+ printing_area = self.getConvexHull()
+ return printing_area
+
## The same as recomputeConvexHull, but using a timer if it was set.
def recomputeConvexHullDelayed(self) -> None:
if self._recompute_convex_hull_timer is not None:
@@ -172,10 +188,9 @@ class ConvexHullDecorator(SceneNodeDecorator):
self._convex_hull_node = None
return
- convex_hull = self.getConvexHull()
if self._convex_hull_node:
self._convex_hull_node.setParent(None)
- hull_node = ConvexHullNode.ConvexHullNode(self._node, convex_hull, self._raft_thickness, root)
+ hull_node = ConvexHullNode.ConvexHullNode(self._node, self.getPrintingArea(), self._raft_thickness, root)
self._convex_hull_node = hull_node
def _onSettingValueChanged(self, key: str, property_name: str) -> None:
@@ -416,6 +431,14 @@ class ConvexHullDecorator(SceneNodeDecorator):
return True
return self.__isDescendant(root, node.getParent())
+ ## True if print_sequence is one_at_a_time and _node is not part of a group
+ def _isSingularOneAtATimeNode(self) -> bool:
+ if self._node is None:
+ return False
+ return self._global_stack is not None \
+ and self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" \
+ and not self.hasGroupAsParent(self._node)
+
_affected_settings = [
"adhesion_type", "raft_margin", "print_sequence",
"skirt_gap", "skirt_line_count", "skirt_brim_line_width", "skirt_distance", "brim_line_count"]
diff --git a/cura/Scene/ConvexHullNode.py b/cura/Scene/ConvexHullNode.py
index 90bf536308..da2713a522 100644
--- a/cura/Scene/ConvexHullNode.py
+++ b/cura/Scene/ConvexHullNode.py
@@ -1,6 +1,6 @@
# Copyright (c) 2015 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional
+from typing import Optional, TYPE_CHECKING
from UM.Application import Application
from UM.Math.Polygon import Polygon
@@ -11,6 +11,9 @@ from UM.Math.Color import Color
from UM.Mesh.MeshBuilder import MeshBuilder # To create a mesh to display the convex hull with.
from UM.View.GL.OpenGL import OpenGL
+if TYPE_CHECKING:
+ from UM.Mesh.MeshData import MeshData
+
class ConvexHullNode(SceneNode):
shader = None # To prevent the shader from being re-built over and over again, only load it once.
@@ -43,7 +46,8 @@ class ConvexHullNode(SceneNode):
# The node this mesh is "watching"
self._node = node
- self._convex_hull_head_mesh = None
+ # Area of the head + fans for display as a shadow on the buildplate
+ self._convex_hull_head_mesh = None # type: Optional[MeshData]
self._node.decoratorsChanged.connect(self._onNodeDecoratorsChanged)
self._onNodeDecoratorsChanged(self._node)
@@ -76,14 +80,17 @@ class ConvexHullNode(SceneNode):
if self.getParent():
if self.getMeshData() and isinstance(self._node, SceneNode) and self._node.callDecoration("getBuildPlateNumber") == Application.getInstance().getMultiBuildPlateModel().activeBuildPlate:
+ # The object itself (+ adhesion in one-at-a-time mode)
renderer.queueNode(self, transparent = True, shader = ConvexHullNode.shader, backface_cull = True, sort = -8)
if self._convex_hull_head_mesh:
+ # The full head. Rendered as a hint to the user: If this area overlaps another object A; this object
+ # cannot be printed after A, because the head would hit A while printing the current object
renderer.queueNode(self, shader = ConvexHullNode.shader, transparent = True, mesh = self._convex_hull_head_mesh, backface_cull = True, sort = -8)
return True
def _onNodeDecoratorsChanged(self, node: SceneNode) -> None:
- convex_hull_head = self._node.callDecoration("getConvexHullHead")
+ convex_hull_head = self._node.callDecoration("getConvexHullHeadFull")
if convex_hull_head:
convex_hull_head_builder = MeshBuilder()
convex_hull_head_builder.addConvexPolygon(convex_hull_head.getPoints(), self._mesh_height - self._thickness)
diff --git a/cura/Scene/CuraSceneNode.py b/cura/Scene/CuraSceneNode.py
index 4215c8fa84..eb609def5a 100644
--- a/cura/Scene/CuraSceneNode.py
+++ b/cura/Scene/CuraSceneNode.py
@@ -88,7 +88,7 @@ class CuraSceneNode(SceneNode):
## Return if any area collides with the convex hull of this scene node
def collidesWithAreas(self, areas: List[Polygon]) -> bool:
- convex_hull = self.callDecoration("getConvexHull")
+ convex_hull = self.callDecoration("getPrintingArea")
if convex_hull:
if not convex_hull.isValid():
return False
diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py
index 9f20c8ccfa..92f06929d2 100644
--- a/cura/Settings/ContainerManager.py
+++ b/cura/Settings/ContainerManager.py
@@ -1,15 +1,14 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import os
import urllib.parse
import uuid
-from typing import Dict, Union, Any, TYPE_CHECKING, List, cast
+from typing import Any, cast, Dict, List, TYPE_CHECKING, Union
from PyQt5.QtCore import QObject, QUrl
from PyQt5.QtWidgets import QMessageBox
-
from UM.i18n import i18nCatalog
from UM.FlameProfiler import pyqtSlot
from UM.Logger import Logger
@@ -17,21 +16,19 @@ from UM.MimeTypeDatabase import MimeTypeDatabase, MimeTypeNotFoundError
from UM.Platform import Platform
from UM.SaveFile import SaveFile
from UM.Settings.ContainerFormatError import ContainerFormatError
+from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.ContainerStack import ContainerStack
from UM.Settings.DefinitionContainer import DefinitionContainer
from UM.Settings.InstanceContainer import InstanceContainer
+import cura.CuraApplication
+from cura.Machines.ContainerTree import ContainerTree
if TYPE_CHECKING:
from cura.CuraApplication import CuraApplication
from cura.Machines.ContainerNode import ContainerNode
from cura.Machines.MaterialNode import MaterialNode
from cura.Machines.QualityChangesGroup import QualityChangesGroup
- from UM.PluginRegistry import PluginRegistry
- from cura.Settings.MachineManager import MachineManager
- from cura.Machines.MaterialManager import MaterialManager
- from cura.Machines.QualityManager import QualityManager
- from cura.Settings.CuraContainerRegistry import CuraContainerRegistry
catalog = i18nCatalog("cura")
@@ -52,17 +49,11 @@ class ContainerManager(QObject):
except TypeError:
super().__init__()
- self._application = application # type: CuraApplication
- self._plugin_registry = self._application.getPluginRegistry() # type: PluginRegistry
- self._container_registry = self._application.getContainerRegistry() # type: CuraContainerRegistry
- self._machine_manager = self._application.getMachineManager() # type: MachineManager
- self._material_manager = self._application.getMaterialManager() # type: MaterialManager
- self._quality_manager = self._application.getQualityManager() # type: QualityManager
self._container_name_filters = {} # type: Dict[str, Dict[str, Any]]
@pyqtSlot(str, str, result=str)
def getContainerMetaDataEntry(self, container_id: str, entry_names: str) -> str:
- metadatas = self._container_registry.findContainersMetadata(id = container_id)
+ metadatas = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry().findContainersMetadata(id = container_id)
if not metadatas:
Logger.log("w", "Could not get metadata of container %s because it was not found.", container_id)
return ""
@@ -91,15 +82,19 @@ class ContainerManager(QObject):
# Update: In order for QML to use objects and sub objects, those (sub) objects must all be QObject. Is that what we want?
@pyqtSlot("QVariant", str, str)
def setContainerMetaDataEntry(self, container_node: "ContainerNode", entry_name: str, entry_value: str) -> bool:
+ if container_node.container is None:
+ Logger.log("w", "Container node {0} doesn't have a container.".format(container_node.container_id))
+ return False
root_material_id = container_node.getMetaDataEntry("base_file", "")
- if self._container_registry.isReadOnly(root_material_id):
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
+ if container_registry.isReadOnly(root_material_id):
Logger.log("w", "Cannot set metadata of read-only container %s.", root_material_id)
return False
-
- material_group = self._material_manager.getMaterialGroup(root_material_id)
- if material_group is None:
- Logger.log("w", "Unable to find material group for: %s.", root_material_id)
+ root_material_query = container_registry.findContainers(id = root_material_id)
+ if not root_material_query:
+ Logger.log("w", "Unable to find root material: {root_material}.".format(root_material = root_material_id))
return False
+ root_material = root_material_query[0]
entries = entry_name.split("/")
entry_name = entries.pop()
@@ -107,7 +102,7 @@ class ContainerManager(QObject):
sub_item_changed = False
if entries:
root_name = entries.pop(0)
- root = material_group.root_material_node.getMetaDataEntry(root_name)
+ root = root_material.getMetaDataEntry(root_name)
item = root
for _ in range(len(entries)):
@@ -120,16 +115,14 @@ class ContainerManager(QObject):
entry_name = root_name
entry_value = root
- container = material_group.root_material_node.getContainer()
- if container is not None:
- container.setMetaDataEntry(entry_name, entry_value)
- if sub_item_changed: #If it was only a sub-item that has changed then the setMetaDataEntry won't correctly notice that something changed, and we must manually signal that the metadata changed.
- container.metaDataChanged.emit(container)
+ root_material.setMetaDataEntry(entry_name, entry_value)
+ if sub_item_changed: #If it was only a sub-item that has changed then the setMetaDataEntry won't correctly notice that something changed, and we must manually signal that the metadata changed.
+ root_material.metaDataChanged.emit(root_material)
return True
@pyqtSlot(str, result = str)
def makeUniqueName(self, original_name: str) -> str:
- return self._container_registry.uniqueName(original_name)
+ return cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry().uniqueName(original_name)
## Get a list of string that can be used as name filters for a Qt File Dialog
#
@@ -184,7 +177,7 @@ class ContainerManager(QObject):
else:
mime_type = self._container_name_filters[file_type]["mime"]
- containers = self._container_registry.findContainers(id = container_id)
+ containers = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry().findContainers(id = container_id)
if not containers:
return {"status": "error", "message": "Container not found"}
container = containers[0]
@@ -242,18 +235,19 @@ class ContainerManager(QObject):
except MimeTypeNotFoundError:
return {"status": "error", "message": "Could not determine mime type of file"}
- container_type = self._container_registry.getContainerForMimeType(mime_type)
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
+ container_type = container_registry.getContainerForMimeType(mime_type)
if not container_type:
return {"status": "error", "message": "Could not find a container to handle the specified file."}
container_id = urllib.parse.unquote_plus(mime_type.stripExtension(os.path.basename(file_url)))
- container_id = self._container_registry.uniqueName(container_id)
+ container_id = container_registry.uniqueName(container_id)
container = container_type(container_id)
try:
with open(file_url, "rt", encoding = "utf-8") as f:
- container.deserialize(f.read())
+ container.deserialize(f.read(), file_url)
except PermissionError:
return {"status": "error", "message": "Permission denied when trying to read the file."}
except ContainerFormatError:
@@ -263,7 +257,7 @@ class ContainerManager(QObject):
container.setDirty(True)
- self._container_registry.addContainer(container)
+ container_registry.addContainer(container)
return {"status": "success", "message": "Successfully imported container {0}".format(container.getName())}
@@ -275,44 +269,55 @@ class ContainerManager(QObject):
# \return \type{bool} True if successful, False if not.
@pyqtSlot(result = bool)
def updateQualityChanges(self) -> bool:
- global_stack = self._machine_manager.activeMachine
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ global_stack = application.getMachineManager().activeMachine
if not global_stack:
return False
- self._machine_manager.blurSettings.emit()
+ application.getMachineManager().blurSettings.emit()
current_quality_changes_name = global_stack.qualityChanges.getName()
current_quality_type = global_stack.quality.getMetaDataEntry("quality_type")
extruder_stacks = list(global_stack.extruders.values())
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
+ machine_definition_id = ContainerTree.getInstance().machines[global_stack.definition.getId()].quality_definition
for stack in [global_stack] + extruder_stacks:
# Find the quality_changes container for this stack and merge the contents of the top container into it.
quality_changes = stack.qualityChanges
if quality_changes.getId() == "empty_quality_changes":
- quality_changes = self._quality_manager._createQualityChanges(current_quality_type, current_quality_changes_name,
- global_stack, stack)
- self._container_registry.addContainer(quality_changes)
+ quality_changes = InstanceContainer(container_registry.uniqueName((stack.getId() + "_" + current_quality_changes_name).lower().replace(" ", "_")))
+ quality_changes.setName(current_quality_changes_name)
+ quality_changes.setMetaDataEntry("type", "quality_changes")
+ quality_changes.setMetaDataEntry("quality_type", current_quality_type)
+ if stack.getMetaDataEntry("position") is not None: # Extruder stacks.
+ quality_changes.setMetaDataEntry("position", stack.getMetaDataEntry("position"))
+ quality_changes.setMetaDataEntry("intent_category", stack.quality.getMetaDataEntry("intent_category", "default"))
+ quality_changes.setMetaDataEntry("setting_version", application.SettingVersion)
+ quality_changes.setDefinition(machine_definition_id)
+ container_registry.addContainer(quality_changes)
stack.qualityChanges = quality_changes
- if not quality_changes or self._container_registry.isReadOnly(quality_changes.getId()):
+ if not quality_changes or container_registry.isReadOnly(quality_changes.getId()):
Logger.log("e", "Could not update quality of a nonexistant or read only quality profile in stack %s", stack.getId())
continue
self._performMerge(quality_changes, stack.getTop())
- self._machine_manager.activeQualityChangesGroupChanged.emit()
+ cura.CuraApplication.CuraApplication.getInstance().getMachineManager().activeQualityChangesGroupChanged.emit()
return True
## Clear the top-most (user) containers of the active stacks.
@pyqtSlot()
def clearUserContainers(self) -> None:
- self._machine_manager.blurSettings.emit()
+ machine_manager = cura.CuraApplication.CuraApplication.getInstance().getMachineManager()
+ machine_manager.blurSettings.emit()
send_emits_containers = []
# Go through global and extruder stacks and clear their topmost container (the user settings).
- global_stack = self._machine_manager.activeMachine
+ global_stack = machine_manager.activeMachine
extruder_stacks = list(global_stack.extruders.values())
for stack in [global_stack] + extruder_stacks:
container = stack.userChanges
@@ -320,40 +325,38 @@ class ContainerManager(QObject):
send_emits_containers.append(container)
# user changes are possibly added to make the current setup match the current enabled extruders
- self._machine_manager.correctExtruderSettings()
+ machine_manager.correctExtruderSettings()
for container in send_emits_containers:
container.sendPostponedEmits()
## Get a list of materials that have the same GUID as the reference material
#
- # \param material_id \type{str} the id of the material for which to get the linked materials.
- # \return \type{list} a list of names of materials with the same GUID
+ # \param material_node The node representing the material for which to get
+ # the same GUID.
+ # \param exclude_self Whether to include the name of the material you
+ # provided.
+ # \return A list of names of materials with the same GUID.
@pyqtSlot("QVariant", bool, result = "QStringList")
- def getLinkedMaterials(self, material_node: "MaterialNode", exclude_self: bool = False):
- guid = material_node.getMetaDataEntry("GUID", "")
-
- self_root_material_id = material_node.getMetaDataEntry("base_file")
- material_group_list = self._material_manager.getMaterialGroupListByGUID(guid)
-
- linked_material_names = []
- if material_group_list:
- for material_group in material_group_list:
- if exclude_self and material_group.name == self_root_material_id:
- continue
- linked_material_names.append(material_group.root_material_node.getMetaDataEntry("name", ""))
- return linked_material_names
+ def getLinkedMaterials(self, material_node: "MaterialNode", exclude_self: bool = False) -> List[str]:
+ same_guid = ContainerRegistry.getInstance().findInstanceContainersMetadata(GUID = material_node.guid)
+ if exclude_self:
+ return list({meta["name"] for meta in same_guid if meta["base_file"] != material_node.base_file})
+ else:
+ return list({meta["name"] for meta in same_guid})
## Unlink a material from all other materials by creating a new GUID
# \param material_id \type{str} the id of the material to create a new GUID for.
@pyqtSlot("QVariant")
def unlinkMaterial(self, material_node: "MaterialNode") -> None:
# Get the material group
- material_group = self._material_manager.getMaterialGroup(material_node.getMetaDataEntry("base_file", ""))
-
- if material_group is None:
+ if material_node.container is None: # Failed to lazy-load this container.
+ return
+ root_material_query = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry().findInstanceContainers(id = material_node.getMetaDataEntry("base_file", ""))
+ if not root_material_query:
Logger.log("w", "Unable to find material group for %s", material_node)
return
+ root_material = root_material_query[0]
# Generate a new GUID
new_guid = str(uuid.uuid4())
@@ -361,9 +364,7 @@ class ContainerManager(QObject):
# Update the GUID
# NOTE: We only need to set the root material container because XmlMaterialProfile.setMetaDataEntry() will
# take care of the derived containers too
- container = material_group.root_material_node.getContainer()
- if container is not None:
- container.setMetaDataEntry("GUID", new_guid)
+ root_material.setMetaDataEntry("GUID", new_guid)
def _performMerge(self, merge_into: InstanceContainer, merge: InstanceContainer, clear_settings: bool = True) -> None:
if merge == merge_into:
@@ -377,14 +378,16 @@ class ContainerManager(QObject):
def _updateContainerNameFilters(self) -> None:
self._container_name_filters = {}
- for plugin_id, container_type in self._container_registry.getContainerTypes():
+ plugin_registry = cura.CuraApplication.CuraApplication.getInstance().getPluginRegistry()
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
+ for plugin_id, container_type in container_registry.getContainerTypes():
# Ignore default container types since those are not plugins
if container_type in (InstanceContainer, ContainerStack, DefinitionContainer):
continue
serialize_type = ""
try:
- plugin_metadata = self._plugin_registry.getMetaData(plugin_id)
+ plugin_metadata = plugin_registry.getMetaData(plugin_id)
if plugin_metadata:
serialize_type = plugin_metadata["settings_container"]["type"]
else:
@@ -392,7 +395,7 @@ class ContainerManager(QObject):
except KeyError as e:
continue
- mime_type = self._container_registry.getMimeTypeForContainer(container_type)
+ mime_type = container_registry.getMimeTypeForContainer(container_type)
if mime_type is None:
continue
entry = {
@@ -428,7 +431,7 @@ class ContainerManager(QObject):
path = file_url.toLocalFile()
if not path:
return {"status": "error", "message": catalog.i18nc("@info:status", "Invalid file URL:") + " " + str(file_url)}
- return self._container_registry.importProfile(path)
+ return cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry().importProfile(path)
@pyqtSlot(QObject, QUrl, str)
def exportQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup", file_url: QUrl, file_type: str) -> None:
@@ -438,8 +441,11 @@ class ContainerManager(QObject):
if not path:
return
- container_list = [cast(InstanceContainer, n.getContainer()) for n in quality_changes_group.getAllNodes() if n.getContainer() is not None]
- self._container_registry.exportQualityProfile(container_list, path, file_type)
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
+ container_list = [cast(InstanceContainer, container_registry.findContainers(id = quality_changes_group.metadata_for_global["id"])[0])] # type: List[InstanceContainer]
+ for metadata in quality_changes_group.metadata_per_extruder.values():
+ container_list.append(cast(InstanceContainer, container_registry.findContainers(id = metadata["id"])[0]))
+ cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry().exportQualityProfile(container_list, path, file_type)
__instance = None # type: ContainerManager
diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py
index 3c93888b66..f6028e9d4d 100644
--- a/cura/Settings/CuraContainerRegistry.py
+++ b/cura/Settings/CuraContainerRegistry.py
@@ -21,6 +21,7 @@ from UM.Message import Message
from UM.Platform import Platform
from UM.PluginRegistry import PluginRegistry # For getting the possible profile writers to write with.
from UM.Resources import Resources
+from UM.Util import parseBool
from cura.ReaderWriters.ProfileWriter import ProfileWriter
from . import ExtruderStack
@@ -28,7 +29,7 @@ from . import GlobalStack
import cura.CuraApplication
from cura.Settings.cura_empty_instance_containers import empty_quality_container
-from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch
+from cura.Machines.ContainerTree import ContainerTree
from cura.ReaderWriters.ProfileReader import NoProfileException, ProfileReader
from UM.i18n import i18nCatalog
@@ -101,7 +102,8 @@ class CuraContainerRegistry(ContainerRegistry):
## Exports an profile to a file
#
- # \param container_list \type{list} the containers to export
+ # \param container_list \type{list} the containers to export. This is not
+ # necessarily in any order!
# \param file_name \type{str} the full path and filename to export to.
# \param file_type \type{str} the file type with the format " (*.)"
# \return True if the export succeeded, false otherwise.
@@ -177,6 +179,7 @@ class CuraContainerRegistry(ContainerRegistry):
global_stack = Application.getInstance().getGlobalContainerStack()
if not global_stack:
return {"status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags !", "Can't import profile from {0} before a printer is added.", file_name)}
+ container_tree = ContainerTree.getInstance()
machine_extruders = []
for position in sorted(global_stack.extruders):
@@ -226,7 +229,7 @@ class CuraContainerRegistry(ContainerRegistry):
# Make sure we have a profile_definition in the file:
if profile_definition is None:
break
- machine_definitions = self.findDefinitionContainers(id = profile_definition)
+ machine_definitions = self.findContainers(id = profile_definition)
if not machine_definitions:
Logger.log("e", "Incorrect profile [%s]. Unknown machine type [%s]", file_name, profile_definition)
return {"status": "error",
@@ -236,8 +239,9 @@ class CuraContainerRegistry(ContainerRegistry):
# Get the expected machine definition.
# i.e.: We expect gcode for a UM2 Extended to be defined as normal UM2 gcode...
- profile_definition = getMachineDefinitionIDForQualitySearch(machine_definition)
- expected_machine_definition = getMachineDefinitionIDForQualitySearch(global_stack.definition)
+ has_machine_quality = parseBool(machine_definition.getMetaDataEntry("has_machine_quality", "false"))
+ profile_definition = machine_definition.getMetaDataEntry("quality_definition", machine_definition.getId()) if has_machine_quality else "fdmprinter"
+ expected_machine_definition = container_tree.machines[global_stack.definition.getId()].quality_definition
# And check if the profile_definition matches either one (showing error if not):
if profile_definition != expected_machine_definition:
@@ -268,7 +272,6 @@ class CuraContainerRegistry(ContainerRegistry):
profile.setMetaDataEntry("type", "quality_changes")
profile.setMetaDataEntry("definition", expected_machine_definition)
profile.setMetaDataEntry("quality_type", quality_type)
- profile.setMetaDataEntry("position", "0")
profile.setDirty(True)
if idx == 0:
# Move all per-extruder settings to the first extruder's quality_changes
@@ -384,14 +387,13 @@ class CuraContainerRegistry(ContainerRegistry):
global_stack = Application.getInstance().getGlobalContainerStack()
if global_stack is None:
return None
- definition_id = getMachineDefinitionIDForQualitySearch(global_stack.definition)
+ definition_id = ContainerTree.getInstance().machines[global_stack.definition.getId()].quality_definition
profile.setDefinition(definition_id)
# Check to make sure the imported profile actually makes sense in context of the current configuration.
# This prevents issues where importing a "draft" profile for a machine without "draft" qualities would report as
# successfully imported but then fail to show up.
- quality_manager = cura.CuraApplication.CuraApplication.getInstance()._quality_manager
- quality_group_dict = quality_manager.getQualityGroupsForMachineDefinition(global_stack)
+ quality_group_dict = ContainerTree.getInstance().getCurrentQualityGroups()
# "not_supported" profiles can be imported.
if quality_type != empty_quality_container.getMetaDataEntry("quality_type") and quality_type not in quality_group_dict:
return catalog.i18nc("@info:status", "Could not find a quality type {0} for the current configuration.", quality_type)
@@ -614,6 +616,7 @@ class CuraContainerRegistry(ContainerRegistry):
extruder_quality_changes_container.setMetaDataEntry("setting_version", application.SettingVersion)
extruder_quality_changes_container.setMetaDataEntry("position", extruder_definition.getMetaDataEntry("position"))
extruder_quality_changes_container.setMetaDataEntry("quality_type", machine_quality_changes.getMetaDataEntry("quality_type"))
+ extruder_quality_changes_container.setMetaDataEntry("intent_category", "default") # Intent categories weren't a thing back then.
extruder_quality_changes_container.setDefinition(machine_quality_changes.getDefinition().getId())
self.addContainer(extruder_quality_changes_container)
diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py
index 042b065226..1455e140a8 100755
--- a/cura/Settings/CuraContainerStack.py
+++ b/cura/Settings/CuraContainerStack.py
@@ -87,6 +87,19 @@ class CuraContainerStack(ContainerStack):
def qualityChanges(self) -> InstanceContainer:
return cast(InstanceContainer, self._containers[_ContainerIndexes.QualityChanges])
+ ## Set the intent container.
+ #
+ # \param new_intent The new intent container. It is expected to have a "type" metadata entry with the value "intent".
+ def setIntent(self, new_intent: InstanceContainer, postpone_emit: bool = False) -> None:
+ self.replaceContainer(_ContainerIndexes.Intent, new_intent, postpone_emit = postpone_emit)
+
+ ## Get the quality container.
+ #
+ # \return The intent container. Should always be a valid container, but can be equal to the empty InstanceContainer.
+ @pyqtProperty(InstanceContainer, fset = setIntent, notify = pyqtContainersChanged)
+ def intent(self) -> InstanceContainer:
+ return cast(InstanceContainer, self._containers[_ContainerIndexes.Intent])
+
## Set the quality container.
#
# \param new_quality The new quality container. It is expected to have a "type" metadata entry with the value "quality".
@@ -330,16 +343,18 @@ class CuraContainerStack(ContainerStack):
class _ContainerIndexes:
UserChanges = 0
QualityChanges = 1
- Quality = 2
- Material = 3
- Variant = 4
- DefinitionChanges = 5
- Definition = 6
+ Intent = 2
+ Quality = 3
+ Material = 4
+ Variant = 5
+ DefinitionChanges = 6
+ Definition = 7
# Simple hash map to map from index to "type" metadata entry
IndexTypeMap = {
UserChanges: "user",
QualityChanges: "quality_changes",
+ Intent: "intent",
Quality: "quality",
Material: "material",
Variant: "variant",
diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py
index cef6150043..61a04e1be6 100644
--- a/cura/Settings/CuraStackBuilder.py
+++ b/cura/Settings/CuraStackBuilder.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.
from typing import Optional
@@ -8,7 +8,8 @@ from UM.Logger import Logger
from UM.Settings.Interfaces import DefinitionContainerInterface
from UM.Settings.InstanceContainer import InstanceContainer
-from cura.Machines.VariantType import VariantType
+from cura.Machines.ContainerTree import ContainerTree
+from cura.Machines.MachineNode import MachineNode
from .GlobalStack import GlobalStack
from .ExtruderStack import ExtruderStack
@@ -26,9 +27,8 @@ class CuraStackBuilder:
def createMachine(cls, name: str, definition_id: str) -> Optional[GlobalStack]:
from cura.CuraApplication import CuraApplication
application = CuraApplication.getInstance()
- variant_manager = application.getVariantManager()
- quality_manager = application.getQualityManager()
registry = application.getContainerRegistry()
+ container_tree = ContainerTree.getInstance()
definitions = registry.findDefinitionContainers(id = definition_id)
if not definitions:
@@ -37,14 +37,7 @@ class CuraStackBuilder:
return None
machine_definition = definitions[0]
-
- # get variant container for the global stack
- global_variant_container = application.empty_variant_container
- global_variant_node = variant_manager.getDefaultVariantNode(machine_definition, VariantType.BUILD_PLATE)
- if global_variant_node:
- global_variant_container = global_variant_node.getContainer()
- if not global_variant_container:
- global_variant_container = application.empty_variant_container
+ machine_node = container_tree.machines[machine_definition.getId()]
generated_name = registry.createUniqueName("machine", "", name, machine_definition.getName())
# Make sure the new name does not collide with any definition or (quality) profile
@@ -56,9 +49,9 @@ class CuraStackBuilder:
new_global_stack = cls.createGlobalStack(
new_stack_id = generated_name,
definition = machine_definition,
- variant_container = global_variant_container,
+ variant_container = application.empty_variant_container,
material_container = application.empty_material_container,
- quality_container = application.empty_quality_container,
+ quality_container = machine_node.preferredGlobalQuality().container,
)
new_global_stack.setName(generated_name)
@@ -67,33 +60,9 @@ class CuraStackBuilder:
for position in extruder_dict:
cls.createExtruderStackWithDefaultSetup(new_global_stack, position)
- for new_extruder in new_global_stack.extruders.values(): #Only register the extruders if we're sure that all of them are correct.
+ for new_extruder in new_global_stack.extruders.values(): # Only register the extruders if we're sure that all of them are correct.
registry.addContainer(new_extruder)
- preferred_quality_type = machine_definition.getMetaDataEntry("preferred_quality_type")
- quality_group_dict = quality_manager.getQualityGroups(new_global_stack)
- if not quality_group_dict:
- # There is no available quality group, set all quality containers to empty.
- new_global_stack.quality = application.empty_quality_container
- for extruder_stack in new_global_stack.extruders.values():
- extruder_stack.quality = application.empty_quality_container
- else:
- # Set the quality containers to the preferred quality type if available, otherwise use the first quality
- # type that's available.
- if preferred_quality_type not in quality_group_dict:
- Logger.log("w", "The preferred quality {quality_type} doesn't exist for this set-up. Choosing a random one.".format(quality_type = preferred_quality_type))
- preferred_quality_type = next(iter(quality_group_dict))
- quality_group = quality_group_dict.get(preferred_quality_type)
-
- new_global_stack.quality = quality_group.node_for_global.getContainer()
- if not new_global_stack.quality:
- new_global_stack.quality = application.empty_quality_container
- for position, extruder_stack in new_global_stack.extruders.items():
- if position in quality_group.nodes_for_extruders and quality_group.nodes_for_extruders[position].getContainer():
- extruder_stack.quality = quality_group.nodes_for_extruders[position].getContainer()
- else:
- extruder_stack.quality = application.empty_quality_container
-
# Register the global stack after the extruder stacks are created. This prevents the registry from adding another
# extruder stack because the global stack didn't have one yet (which is enforced since Cura 3.1).
registry.addContainer(new_global_stack)
@@ -108,37 +77,32 @@ class CuraStackBuilder:
def createExtruderStackWithDefaultSetup(cls, global_stack: "GlobalStack", extruder_position: int) -> None:
from cura.CuraApplication import CuraApplication
application = CuraApplication.getInstance()
- variant_manager = application.getVariantManager()
- material_manager = application.getMaterialManager()
registry = application.getContainerRegistry()
- # get variant container for extruders
- extruder_variant_container = application.empty_variant_container
- extruder_variant_node = variant_manager.getDefaultVariantNode(global_stack.definition, VariantType.NOZZLE,
- global_stack = global_stack)
- extruder_variant_name = None
- if extruder_variant_node:
- extruder_variant_container = extruder_variant_node.getContainer()
- if not extruder_variant_container:
- extruder_variant_container = application.empty_variant_container
- extruder_variant_name = extruder_variant_container.getName()
-
+ # Get the extruder definition.
extruder_definition_dict = global_stack.getMetaDataEntry("machine_extruder_trains")
extruder_definition_id = extruder_definition_dict[str(extruder_position)]
try:
extruder_definition = registry.findDefinitionContainers(id = extruder_definition_id)[0]
- except IndexError as e:
+ except IndexError:
# It still needs to break, but we want to know what extruder ID made it break.
msg = "Unable to find extruder definition with the id [%s]" % extruder_definition_id
Logger.logException("e", msg)
raise IndexError(msg)
- # get material container for extruders
- material_container = application.empty_material_container
- material_node = material_manager.getDefaultMaterial(global_stack, str(extruder_position), extruder_variant_name,
- extruder_definition = extruder_definition)
- if material_node and material_node.getContainer():
- material_container = material_node.getContainer()
+ # Find out what filament diameter we need.
+ approximate_diameter = round(extruder_definition.getProperty("material_diameter", "value")) # Can't be modified by definition changes since we are just initialising the stack here.
+
+ # Find the preferred containers.
+ machine_node = ContainerTree.getInstance().machines[global_stack.definition.getId()]
+ extruder_variant_node = machine_node.variants.get(machine_node.preferred_variant_name)
+ if not extruder_variant_node:
+ Logger.log("w", "Could not find preferred nozzle {nozzle_name}. Falling back to {fallback}.".format(nozzle_name = machine_node.preferred_variant_name, fallback = next(iter(machine_node.variants))))
+ extruder_variant_node = next(iter(machine_node.variants.values()))
+ extruder_variant_container = extruder_variant_node.container
+ material_node = extruder_variant_node.preferredMaterial(approximate_diameter)
+ material_container = material_node.container
+ quality_node = material_node.preferredQuality()
new_extruder_id = registry.uniqueName(extruder_definition_id)
new_extruder = cls.createExtruderStack(
@@ -148,7 +112,7 @@ class CuraStackBuilder:
position = extruder_position,
variant_container = extruder_variant_container,
material_container = material_container,
- quality_container = application.empty_quality_container
+ quality_container = quality_node.container
)
new_extruder.setNextStack(global_stack)
@@ -190,6 +154,7 @@ class CuraStackBuilder:
stack.variant = variant_container
stack.material = material_container
stack.quality = quality_container
+ stack.intent = application.empty_intent_container
stack.qualityChanges = application.empty_quality_changes_container
stack.userChanges = user_container
@@ -238,6 +203,7 @@ class CuraStackBuilder:
stack.variant = variant_container
stack.material = material_container
stack.quality = quality_container
+ stack.intent = application.empty_intent_container
stack.qualityChanges = application.empty_quality_changes_container
stack.userChanges = user_container
diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py
index 417f7b01ff..62bf396878 100755
--- a/cura/Settings/ExtruderManager.py
+++ b/cura/Settings/ExtruderManager.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.
from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant # For communicating data and events to Qt.
@@ -12,7 +12,6 @@ from UM.Scene.SceneNode import SceneNode
from UM.Scene.Selection import Selection
from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator
from UM.Settings.ContainerRegistry import ContainerRegistry # Finding containers by ID.
-from UM.Decorators import deprecated
from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING, Union
@@ -42,8 +41,6 @@ class ExtruderManager(QObject):
# TODO; I have no idea why this is a union of ID's and extruder stacks. This needs to be fixed at some point.
self._selected_object_extruders = [] # type: List[Union[str, "ExtruderStack"]]
- self._addCurrentMachineExtruders()
-
Selection.selectionChanged.connect(self.resetSelectedObjectExtruders)
## Signal to notify other components when the list of extruders for a machine definition changes.
@@ -91,17 +88,6 @@ class ExtruderManager(QObject):
def activeExtruderIndex(self) -> int:
return self._active_extruder_index
- ## Gets the extruder name of an extruder of the currently active machine.
- #
- # \param index The index of the extruder whose name to get.
- @pyqtSlot(int, result = str)
- @deprecated("Use Cura.MachineManager.activeMachine.extruders[index].name instead", "4.3")
- def getExtruderName(self, index: int) -> str:
- try:
- return self.getActiveExtruderStacks()[index].getName()
- except IndexError:
- return ""
-
## Emitted whenever the selectedObjectExtruders property changes.
selectedObjectExtrudersChanged = pyqtSignal()
@@ -322,38 +308,33 @@ class ExtruderManager(QObject):
self.resetSelectedObjectExtruders()
- ## Adds the extruders of the currently active machine.
- def _addCurrentMachineExtruders(self) -> None:
- global_stack = self._application.getGlobalContainerStack()
+ ## Adds the extruders to the selected machine.
+ def addMachineExtruders(self, global_stack: GlobalStack) -> None:
extruders_changed = False
+ container_registry = ContainerRegistry.getInstance()
+ global_stack_id = global_stack.getId()
- if global_stack:
- container_registry = ContainerRegistry.getInstance()
- global_stack_id = global_stack.getId()
+ # Gets the extruder trains that we just created as well as any that still existed.
+ extruder_trains = container_registry.findContainerStacks(type = "extruder_train", machine = global_stack_id)
- # Gets the extruder trains that we just created as well as any that still existed.
- extruder_trains = container_registry.findContainerStacks(type = "extruder_train", machine = global_stack_id)
+ # Make sure the extruder trains for the new machine can be placed in the set of sets
+ if global_stack_id not in self._extruder_trains:
+ self._extruder_trains[global_stack_id] = {}
+ extruders_changed = True
- # Make sure the extruder trains for the new machine can be placed in the set of sets
- if global_stack_id not in self._extruder_trains:
- self._extruder_trains[global_stack_id] = {}
- extruders_changed = True
+ # Register the extruder trains by position
+ for extruder_train in extruder_trains:
+ extruder_position = extruder_train.getMetaDataEntry("position")
+ self._extruder_trains[global_stack_id][extruder_position] = extruder_train
- # Register the extruder trains by position
- for extruder_train in extruder_trains:
- extruder_position = extruder_train.getMetaDataEntry("position")
- self._extruder_trains[global_stack_id][extruder_position] = extruder_train
+ # regardless of what the next stack is, we have to set it again, because of signal routing. ???
+ extruder_train.setParent(global_stack)
+ extruder_train.setNextStack(global_stack)
+ extruders_changed = True
- # regardless of what the next stack is, we have to set it again, because of signal routing. ???
- extruder_train.setParent(global_stack)
- extruder_train.setNextStack(global_stack)
- extruders_changed = True
-
- self.fixSingleExtrusionMachineExtruderDefinition(global_stack)
- if extruders_changed:
- self.extrudersChanged.emit(global_stack_id)
- self.setActiveExtruderIndex(0)
- self.activeExtruderChanged.emit()
+ self.fixSingleExtrusionMachineExtruderDefinition(global_stack)
+ if extruders_changed:
+ self.extrudersChanged.emit(global_stack_id)
# After 3.4, all single-extrusion machines have their own extruder definition files instead of reusing
# "fdmextruder". We need to check a machine here so its extruder definition is correct according to this.
@@ -387,7 +368,7 @@ class ExtruderManager(QObject):
printer = global_stack.getId(), expected = expected_extruder_definition_0_id, got = extruder_stack_0.definition.getId()))
try:
extruder_definition = container_registry.findDefinitionContainers(id = expected_extruder_definition_0_id)[0]
- except IndexError as e:
+ except IndexError:
# It still needs to break, but we want to know what extruder ID made it break.
msg = "Unable to find extruder definition with the id [%s]" % expected_extruder_definition_0_id
Logger.logException("e", msg)
diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py
index 9983ab6c98..5d4b3e38b1 100644
--- a/cura/Settings/ExtruderStack.py
+++ b/cura/Settings/ExtruderStack.py
@@ -51,6 +51,10 @@ class ExtruderStack(CuraContainerStack):
def getNextStack(self) -> Optional["GlobalStack"]:
return super().getNextStack()
+ @pyqtProperty(int, constant = True)
+ def position(self) -> int:
+ return int(self.getMetaDataEntry("position"))
+
def setEnabled(self, enabled: bool) -> None:
if self.getMetaDataEntry("enabled", True) == enabled: # No change.
return # Don't emit a signal then.
diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py
index f2f6277e6a..d3a8842aa3 100755
--- a/cura/Settings/GlobalStack.py
+++ b/cura/Settings/GlobalStack.py
@@ -20,6 +20,7 @@ from UM.Platform import Platform
from UM.Util import parseBool
import cura.CuraApplication
+from cura.PrinterOutput.PrinterOutputDevice import ConnectionType
from . import Exceptions
from .CuraContainerStack import CuraContainerStack
@@ -108,6 +109,19 @@ class GlobalStack(CuraContainerStack):
pass
return result
+ # Returns a boolean indicating if this machine has a remote connection. A machine is considered as remotely
+ # connected if its connection types contain one of the following values:
+ # - ConnectionType.NetworkConnection
+ # - ConnectionType.CloudConnection
+ @pyqtProperty(bool, notify = configuredConnectionTypesChanged)
+ def hasRemoteConnection(self) -> bool:
+ has_remote_connection = False
+
+ for connection_type in self.configuredConnectionTypes:
+ has_remote_connection |= connection_type in [ConnectionType.NetworkConnection.value,
+ ConnectionType.CloudConnection.value]
+ return has_remote_connection
+
## \sa configuredConnectionTypes
def addConfiguredConnectionType(self, connection_type: int) -> None:
configured_connection_types = self.configuredConnectionTypes
@@ -131,6 +145,14 @@ class GlobalStack(CuraContainerStack):
return "machine_stack"
return configuration_type
+ def getIntentCategory(self) -> str:
+ intent_category = "default"
+ for extruder in self.extruderList:
+ category = extruder.intent.getMetaDataEntry("intent_category", "default")
+ if category != "default" and category != intent_category:
+ intent_category = category
+ return intent_category
+
def getBuildplateName(self) -> Optional[str]:
name = None
if self.variant.getId() != "empty_variant":
@@ -265,15 +287,15 @@ class GlobalStack(CuraContainerStack):
def getHeadAndFansCoordinates(self):
return self.getProperty("machine_head_with_fans_polygon", "value")
- @pyqtProperty(int, constant=True)
- def hasMaterials(self):
+ @pyqtProperty(bool, constant = True)
+ def hasMaterials(self) -> bool:
return parseBool(self.getMetaDataEntry("has_materials", False))
- @pyqtProperty(int, constant=True)
- def hasVariants(self):
+ @pyqtProperty(bool, constant = True)
+ def hasVariants(self) -> bool:
return parseBool(self.getMetaDataEntry("has_variants", False))
- @pyqtProperty(int, constant=True)
+ @pyqtProperty(bool, constant = True)
def hasVariantBuildplates(self) -> bool:
return parseBool(self.getMetaDataEntry("has_variant_buildplates", False))
diff --git a/cura/Settings/IntentManager.py b/cura/Settings/IntentManager.py
new file mode 100644
index 0000000000..5133b401b4
--- /dev/null
+++ b/cura/Settings/IntentManager.py
@@ -0,0 +1,179 @@
+# Copyright (c) 2019 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot
+from typing import Any, Dict, List, Optional, Set, Tuple, TYPE_CHECKING
+
+from UM.Logger import Logger
+from UM.Settings.InstanceContainer import InstanceContainer
+
+import cura.CuraApplication
+from cura.Machines.ContainerTree import ContainerTree
+from cura.Settings.cura_empty_instance_containers import empty_intent_container
+
+if TYPE_CHECKING:
+ from UM.Settings.InstanceContainer import InstanceContainer
+
+
+## Front-end for querying which intents are available for a certain
+# configuration.
+class IntentManager(QObject):
+ __instance = None
+
+ ## This class is a singleton.
+ @classmethod
+ def getInstance(cls):
+ if not cls.__instance:
+ cls.__instance = IntentManager()
+ return cls.__instance
+
+ intentCategoryChanged = pyqtSignal() #Triggered when we switch categories.
+
+ ## Gets the metadata dictionaries of all intent profiles for a given
+ # configuration.
+ #
+ # \param definition_id ID of the printer.
+ # \param nozzle_name Name of the nozzle.
+ # \param material_base_file The base_file of the material.
+ # \return A list of metadata dictionaries matching the search criteria, or
+ # an empty list if nothing was found.
+ def intentMetadatas(self, definition_id: str, nozzle_name: str, material_base_file: str) -> List[Dict[str, Any]]:
+ intent_metadatas = [] # type: List[Dict[str, Any]]
+ try:
+ materials = ContainerTree.getInstance().machines[definition_id].variants[nozzle_name].materials
+ except KeyError:
+ Logger.log("w", "Unable to find the machine %s or the variant %s", definition_id, nozzle_name)
+ materials = {}
+ if material_base_file not in materials:
+ return intent_metadatas
+
+ material_node = materials[material_base_file]
+ for quality_node in material_node.qualities.values():
+ for intent_node in quality_node.intents.values():
+ intent_metadatas.append(intent_node.getMetadata())
+ return intent_metadatas
+
+ ## Collects and returns all intent categories available for the given
+ # parameters. Note that the 'default' category is always available.
+ #
+ # \param definition_id ID of the printer.
+ # \param nozzle_name Name of the nozzle.
+ # \param material_id ID of the material.
+ # \return A set of intent category names.
+ def intentCategories(self, definition_id: str, nozzle_id: str, material_id: str) -> List[str]:
+ categories = set()
+ for intent in self.intentMetadatas(definition_id, nozzle_id, material_id):
+ categories.add(intent["intent_category"])
+ categories.add("default") #The "empty" intent is not an actual profile specific to the configuration but we do want it to appear in the categories list.
+ return list(categories)
+
+ ## List of intents to be displayed in the interface.
+ #
+ # For the interface this will have to be broken up into the different
+ # intent categories. That is up to the model there.
+ #
+ # \return A list of tuples of intent_category and quality_type. The actual
+ # instance may vary per extruder.
+ def getCurrentAvailableIntents(self) -> List[Tuple[str, str]]:
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ global_stack = application.getGlobalContainerStack()
+ if global_stack is None:
+ return [("default", "normal")]
+ # TODO: We now do this (return a default) if the global stack is missing, but not in the code below,
+ # even though there should always be defaults. The problem then is what to do with the quality_types.
+ # Currently _also_ inconsistent with 'currentAvailableIntentCategories', which _does_ return default.
+ quality_groups = ContainerTree.getInstance().getCurrentQualityGroups()
+ available_quality_types = {quality_group.quality_type for quality_group in quality_groups.values() if quality_group.node_for_global is not None}
+
+ final_intent_ids = set() # type: Set[str]
+ current_definition_id = global_stack.definition.getId()
+ for extruder_stack in global_stack.extruderList:
+ if not extruder_stack.isEnabled:
+ continue
+ nozzle_name = extruder_stack.variant.getMetaDataEntry("name")
+ material_id = extruder_stack.material.getMetaDataEntry("base_file")
+ final_intent_ids |= {metadata["id"] for metadata in self.intentMetadatas(current_definition_id, nozzle_name, material_id) if metadata.get("quality_type") in available_quality_types}
+
+ result = set() # type: Set[Tuple[str, str]]
+ for intent_id in final_intent_ids:
+ intent_metadata = application.getContainerRegistry().findContainersMetadata(id = intent_id)[0]
+ result.add((intent_metadata["intent_category"], intent_metadata["quality_type"]))
+ return list(result)
+
+ ## List of intent categories available in either of the extruders.
+ #
+ # This is purposefully inconsistent with the way that the quality types
+ # are listed. The quality types will show all quality types available in
+ # the printer using any configuration. This will only list the intent
+ # categories that are available using the current configuration (but the
+ # union over the extruders).
+ # \return List of all categories in the current configurations of all
+ # extruders.
+ def currentAvailableIntentCategories(self) -> List[str]:
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if global_stack is None:
+ return ["default"]
+ current_definition_id = global_stack.definition.getId()
+ final_intent_categories = set() # type: Set[str]
+ for extruder_stack in global_stack.extruderList:
+ if not extruder_stack.isEnabled:
+ continue
+ nozzle_name = extruder_stack.variant.getMetaDataEntry("name")
+ material_id = extruder_stack.material.getMetaDataEntry("base_file")
+ final_intent_categories.update(self.intentCategories(current_definition_id, nozzle_name, material_id))
+ return list(final_intent_categories)
+
+ ## The intent that gets selected by default when no intent is available for
+ # the configuration, an extruder can't match the intent that the user
+ # selects, or just when creating a new printer.
+ def getDefaultIntent(self) -> "InstanceContainer":
+ return empty_intent_container
+
+ @pyqtProperty(str, notify = intentCategoryChanged)
+ def currentIntentCategory(self) -> str:
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ active_extruder_stack = application.getMachineManager().activeStack
+ if active_extruder_stack is None:
+ return ""
+ return active_extruder_stack.intent.getMetaDataEntry("intent_category", "")
+
+ ## Apply intent on the stacks.
+ @pyqtSlot(str, str)
+ def selectIntent(self, intent_category: str, quality_type: str) -> None:
+ Logger.log("i", "Attempting to set intent_category to [%s] and quality type to [%s]", intent_category, quality_type)
+ old_intent_category = self.currentIntentCategory
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ global_stack = application.getGlobalContainerStack()
+ if global_stack is None:
+ return
+ current_definition_id = global_stack.definition.getId()
+ machine_node = ContainerTree.getInstance().machines[current_definition_id]
+ for extruder_stack in global_stack.extruderList:
+ nozzle_name = extruder_stack.variant.getMetaDataEntry("name")
+ material_id = extruder_stack.material.getMetaDataEntry("base_file")
+
+ material_node = machine_node.variants[nozzle_name].materials[material_id]
+
+ # Since we want to switch to a certain quality type, check the tree if we have one.
+ quality_node = None
+ for q_node in material_node.qualities.values():
+ if q_node.quality_type == quality_type:
+ quality_node = q_node
+
+ if quality_node is None:
+ Logger.log("w", "Unable to find quality_type [%s] for extruder [%s]", quality_type, extruder_stack.getId())
+ continue
+
+ # Check that quality node if we can find a matching intent.
+ intent_id = None
+ for id, intent_node in quality_node.intents.items():
+ if intent_node.intent_category == intent_category:
+ intent_id = id
+ intent = application.getContainerRegistry().findContainers(id = intent_id)
+ if intent:
+ extruder_stack.intent = intent[0]
+ else:
+ extruder_stack.intent = self.getDefaultIntent()
+ application.getMachineManager().setQualityGroupByQualityType(quality_type)
+ if old_intent_category != intent_category:
+ self.intentCategoryChanged.emit()
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index 9bcdc7c4e8..de6e270a86 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.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 time
@@ -22,7 +22,12 @@ from UM.Message import Message
from UM.Settings.SettingFunction import SettingFunction
from UM.Signal import postponeSignals, CompressTechnique
-from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch
+import cura.CuraApplication # Imported like this to prevent circular references.
+
+from cura.Machines.ContainerNode import ContainerNode
+from cura.Machines.ContainerTree import ContainerTree
+from cura.Machines.Models.IntentCategoryModel import IntentCategoryModel
+
from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice, ConnectionType
from cura.PrinterOutput.Models.PrinterConfigurationModel import PrinterConfigurationModel
from cura.PrinterOutput.Models.ExtruderConfigurationModel import ExtruderConfigurationModel
@@ -32,7 +37,7 @@ from cura.Settings.ExtruderManager import ExtruderManager
from cura.Settings.ExtruderStack import ExtruderStack
from cura.Settings.cura_empty_instance_containers import (empty_definition_changes_container, empty_variant_container,
empty_material_container, empty_quality_container,
- empty_quality_changes_container)
+ empty_quality_changes_container, empty_intent_container)
from .CuraStackBuilder import CuraStackBuilder
@@ -41,13 +46,10 @@ catalog = i18nCatalog("cura")
from cura.Settings.GlobalStack import GlobalStack
if TYPE_CHECKING:
from cura.CuraApplication import CuraApplication
- from cura.Settings.CuraContainerStack import CuraContainerStack
- from cura.Machines.MaterialManager import MaterialManager
- from cura.Machines.QualityManager import QualityManager
- from cura.Machines.VariantManager import VariantManager
- from cura.Machines.ContainerNode import ContainerNode
+ from cura.Machines.MaterialNode import MaterialNode
from cura.Machines.QualityChangesGroup import QualityChangesGroup
from cura.Machines.QualityGroup import QualityGroup
+ from cura.Machines.VariantNode import VariantNode
class MachineManager(QObject):
@@ -58,8 +60,6 @@ class MachineManager(QObject):
self._global_container_stack = None # type: Optional[GlobalStack]
self._current_root_material_id = {} # type: Dict[str, str]
- self._current_quality_group = None # type: Optional[QualityGroup]
- self._current_quality_changes_group = None # type: Optional[QualityChangesGroup]
self._default_extruder_position = "0" # to be updated when extruders are switched on and off
@@ -95,7 +95,6 @@ class MachineManager(QObject):
extruder_manager.activeExtruderChanged.connect(self.activeQualityChanged)
self.globalContainerChanged.connect(self.activeStackChanged)
- self.globalValueChanged.connect(self.activeStackValueChanged)
ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeStackChanged)
self.activeStackChanged.connect(self.activeStackValueChanged)
@@ -118,22 +117,20 @@ class MachineManager(QObject):
if containers:
containers[0].nameChanged.connect(self._onMaterialNameChanged)
- self._material_manager = self._application.getMaterialManager() # type: MaterialManager
- self._variant_manager = self._application.getVariantManager() # type: VariantManager
- self._quality_manager = self._application.getQualityManager() # type: QualityManager
-
- # When the materials lookup table gets updated, it can mean that a material has its name changed, which should
- # be reflected on the GUI. This signal emission makes sure that it happens.
- self._material_manager.materialsUpdated.connect(self.rootMaterialChanged)
- # When the materials get updated, it can be that an activated material's diameter gets changed. In that case,
- # a material update should be triggered to make sure that the machine still has compatible materials activated.
- self._material_manager.materialsUpdated.connect(self._updateUponMaterialMetadataChange)
self.rootMaterialChanged.connect(self._onRootMaterialChanged)
# Emit the printerConnectedStatusChanged when either globalContainerChanged or outputDevicesChanged are emitted
self.globalContainerChanged.connect(self.printerConnectedStatusChanged)
self.outputDevicesChanged.connect(self.printerConnectedStatusChanged)
+ # For updating active quality display name
+ self.activeQualityChanged.connect(self.activeQualityDisplayNameChanged)
+ self.activeIntentChanged.connect(self.activeQualityDisplayNameChanged)
+ self.activeQualityGroupChanged.connect(self.activeQualityDisplayNameChanged)
+ self.activeQualityChangesGroupChanged.connect(self.activeQualityDisplayNameChanged)
+
+ activeQualityDisplayNameChanged = pyqtSignal()
+
activeQualityGroupChanged = pyqtSignal()
activeQualityChangesGroupChanged = pyqtSignal()
@@ -141,10 +138,10 @@ class MachineManager(QObject):
activeMaterialChanged = pyqtSignal()
activeVariantChanged = pyqtSignal()
activeQualityChanged = pyqtSignal()
- activeStackChanged = pyqtSignal() # Emitted whenever the active stack is changed (ie: when changing between extruders, changing a profile, but not when changing a value)
- extruderChanged = pyqtSignal()
+ activeIntentChanged = pyqtSignal()
+ activeStackChanged = pyqtSignal() # Emitted whenever the active extruder stack is changed (ie: when switching the active extruder tab or changing between printers)
+ extruderChanged = pyqtSignal() # Emitted whenever an extruder is activated or deactivated or the default extruder changes.
- globalValueChanged = pyqtSignal() # Emitted whenever a value inside global container is changed.
activeStackValueChanged = pyqtSignal() # Emitted whenever a value inside the active stack is changed.
activeStackValidationChanged = pyqtSignal() # Emitted whenever a validation inside active container is changed
stacksValidationChanged = pyqtSignal() # Emitted whenever a validation is changed
@@ -157,7 +154,6 @@ class MachineManager(QObject):
printerConnectedStatusChanged = pyqtSignal() # Emitted every time the active machine change or the outputdevices change
rootMaterialChanged = pyqtSignal()
- discoveredPrintersChanged = pyqtSignal()
def setInitialActiveMachine(self) -> None:
active_machine_id = self._application.getPreferences().getValue("cura/active_machine")
@@ -183,9 +179,11 @@ class MachineManager(QObject):
# Create the configuration model with the current data in Cura
self._current_printer_configuration.printerType = self._global_container_stack.definition.getName()
- self._current_printer_configuration.extruderConfigurations = []
- for extruder in self._global_container_stack.extruderList:
- extruder_configuration = ExtruderConfigurationModel()
+
+ if len(self._current_printer_configuration.extruderConfigurations) != len(self._global_container_stack.extruderList):
+ self._current_printer_configuration.extruderConfigurations = [ExtruderConfigurationModel() for extruder in self._global_container_stack.extruderList]
+
+ for extruder, extruder_configuration in zip(self._global_container_stack.extruderList, self._current_printer_configuration.extruderConfigurations):
# For compare just the GUID is needed at this moment
mat_type = extruder.material.getMetaDataEntry("material") if extruder.material != empty_material_container else None
mat_guid = extruder.material.getMetaDataEntry("GUID") if extruder.material != empty_material_container else None
@@ -197,7 +195,6 @@ class MachineManager(QObject):
extruder_configuration.position = int(extruder.getMetaDataEntry("position"))
extruder_configuration.material = material_model
extruder_configuration.hotendID = extruder.variant.getName() if extruder.variant != empty_variant_container else None
- self._current_printer_configuration.extruderConfigurations.append(extruder_configuration)
# An empty build plate configuration from the network printer is presented as an empty string, so use "" for an
# empty build plate.
@@ -220,12 +217,9 @@ class MachineManager(QObject):
return 0
return len(general_definition_containers[0].getAllKeys())
+ ## Triggered when the global container stack is changed in CuraApplication.
def _onGlobalContainerChanged(self) -> None:
if self._global_container_stack:
- try:
- self._global_container_stack.nameChanged.disconnect(self._onMachineNameChanged)
- except TypeError: # pyQtSignal gives a TypeError when disconnecting from something that was already disconnected.
- pass
try:
self._global_container_stack.containersChanged.disconnect(self._onContainersChanged)
except TypeError:
@@ -250,7 +244,6 @@ class MachineManager(QObject):
if self._global_container_stack:
self._application.getPreferences().setValue("cura/active_machine", self._global_container_stack.getId())
- self._global_container_stack.nameChanged.connect(self._onMachineNameChanged)
self._global_container_stack.containersChanged.connect(self._onContainersChanged)
self._global_container_stack.propertyChanged.connect(self._onPropertyChanged)
@@ -270,6 +263,8 @@ class MachineManager(QObject):
extruder_stack.propertyChanged.connect(self._onPropertyChanged)
extruder_stack.containersChanged.connect(self._onContainersChanged)
+ self._onRootMaterialChanged()
+
self.activeQualityGroupChanged.emit()
def _onActiveExtruderStackChanged(self) -> None:
@@ -280,6 +275,7 @@ class MachineManager(QObject):
self.activeQualityChanged.emit()
self.activeVariantChanged.emit()
self.activeMaterialChanged.emit()
+ self.activeIntentChanged.emit()
self.rootMaterialChanged.emit()
self.numberExtrudersEnabledChanged.emit()
@@ -292,88 +288,39 @@ class MachineManager(QObject):
# Notify UI items, such as the "changed" star in profile pull down menu.
self.activeStackValueChanged.emit()
- ## Given a global_stack, make sure that it's all valid by searching for this quality group and applying it again
- def _initMachineState(self, global_stack: "CuraContainerStack") -> None:
- material_dict = {}
- for position, extruder in enumerate(global_stack.extruderList):
- material_dict[str(position)] = extruder.material.getMetaDataEntry("base_file")
- self._current_root_material_id = material_dict
-
- # Update materials to make sure that the diameters match with the machine's
- for position, _ in enumerate(global_stack.extruderList):
- self.updateMaterialWithVariant(str(position))
-
- global_quality = global_stack.quality
- quality_type = global_quality.getMetaDataEntry("quality_type")
- global_quality_changes = global_stack.qualityChanges
- global_quality_changes_name = global_quality_changes.getName()
-
- # Try to set the same quality/quality_changes as the machine specified.
- # If the quality/quality_changes is not available, switch to the default or the first quality that's available.
- same_quality_found = False
- quality_groups = self._application.getQualityManager().getQualityGroups(global_stack)
-
- if global_quality_changes.getId() != "empty_quality_changes":
- quality_changes_groups = self._application.getQualityManager().getQualityChangesGroups(global_stack)
- new_quality_changes_group = quality_changes_groups.get(global_quality_changes_name)
- if new_quality_changes_group is not None:
- self._setQualityChangesGroup(new_quality_changes_group)
- same_quality_found = True
- Logger.log("i", "Machine '%s' quality changes set to '%s'",
- global_stack.getName(), new_quality_changes_group.name)
- else:
- new_quality_group = quality_groups.get(quality_type)
- if new_quality_group is not None:
- self._setQualityGroup(new_quality_group, empty_quality_changes = True)
- same_quality_found = True
- Logger.log("i", "Machine '%s' quality set to '%s'",
- global_stack.getName(), new_quality_group.quality_type)
-
- # Could not find the specified quality/quality_changes, switch to the preferred quality if available,
- # otherwise the first quality that's available, otherwise empty (not supported).
- if not same_quality_found:
- Logger.log("i", "Machine '%s' could not find quality_type '%s' and quality_changes '%s'. "
- "Available quality types are [%s]. Switching to default quality.",
- global_stack.getName(), quality_type, global_quality_changes_name,
- ", ".join(quality_groups.keys()))
- preferred_quality_type = global_stack.getMetaDataEntry("preferred_quality_type")
- quality_group = quality_groups.get(preferred_quality_type)
- if quality_group is None:
- if quality_groups:
- quality_group = list(quality_groups.values())[0]
- self._setQualityGroup(quality_group, empty_quality_changes = True)
-
@pyqtSlot(str)
def setActiveMachine(self, stack_id: str) -> None:
self.blurSettings.emit() # Ensure no-one has focus.
container_registry = CuraContainerRegistry.getInstance()
-
containers = container_registry.findContainerStacks(id = stack_id)
if not containers:
return
- global_stack = containers[0]
+ global_stack = cast(GlobalStack, containers[0])
# Make sure that the default machine actions for this machine have been added
self._application.getMachineActionManager().addDefaultMachineActions(global_stack)
- ExtruderManager.getInstance().fixSingleExtrusionMachineExtruderDefinition(global_stack)
+ extruder_manager = ExtruderManager.getInstance()
+ extruder_manager.fixSingleExtrusionMachineExtruderDefinition(global_stack)
if not global_stack.isValid():
# Mark global stack as invalid
ConfigurationErrorMessage.getInstance().addFaultyContainers(global_stack.getId())
return # We're done here
self._global_container_stack = global_stack
+ extruder_manager.addMachineExtruders(global_stack)
self._application.setGlobalContainerStack(global_stack)
- ExtruderManager.getInstance()._globalContainerStackChanged()
- self._initMachineState(global_stack)
- self._onGlobalContainerChanged()
# Switch to the first enabled extruder
self.updateDefaultExtruder()
default_extruder_position = int(self.defaultExtruderPosition)
- ExtruderManager.getInstance().setActiveExtruderIndex(default_extruder_position)
+ old_active_extruder_index = extruder_manager.activeExtruderIndex
+ extruder_manager.setActiveExtruderIndex(default_extruder_position)
+ if old_active_extruder_index == default_extruder_position:
+ # This signal might not have been emitted yet (if it didn't change) but we still want the models to update that depend on it because we changed the contents of the containers too.
+ extruder_manager.activeExtruderChanged.emit()
self.__emitChangedSignals()
@@ -500,27 +447,6 @@ class MachineManager(QObject):
def stacksHaveErrors(self) -> bool:
return bool(self._stacks_have_errors)
- @pyqtProperty(str, notify = globalContainerChanged)
- @deprecated("use Cura.MachineManager.activeMachine.definition.name instead", "4.1")
- def activeMachineDefinitionName(self) -> str:
- if self._global_container_stack:
- return self._global_container_stack.definition.getName()
- return ""
-
- @pyqtProperty(str, notify = globalContainerChanged)
- @deprecated("use Cura.MachineManager.activeMachine.name instead", "4.1")
- def activeMachineName(self) -> str:
- if self._global_container_stack:
- return self._global_container_stack.getMetaDataEntry("group_name", self._global_container_stack.getName())
- return ""
-
- @pyqtProperty(str, notify = globalContainerChanged)
- @deprecated("use Cura.MachineManager.activeMachine.id instead", "4.1")
- def activeMachineId(self) -> str:
- if self._global_container_stack:
- return self._global_container_stack.getId()
- return ""
-
@pyqtProperty(str, notify = globalContainerChanged)
def activeMachineFirmwareVersion(self) -> str:
if not self._printer_output_devices:
@@ -537,25 +463,6 @@ class MachineManager(QObject):
def printerConnected(self) -> bool:
return bool(self._printer_output_devices)
- @pyqtProperty(bool, notify = printerConnectedStatusChanged)
- @deprecated("use Cura.MachineManager.activeMachine.configuredConnectionTypes instead", "4.2")
- def activeMachineHasRemoteConnection(self) -> bool:
- if self._global_container_stack:
- has_remote_connection = False
-
- for connection_type in self._global_container_stack.configuredConnectionTypes:
- has_remote_connection |= connection_type in [ConnectionType.NetworkConnection.value,
- ConnectionType.CloudConnection.value]
- return has_remote_connection
- return False
-
- @pyqtProperty("QVariantList", notify=globalContainerChanged)
- @deprecated("use Cura.MachineManager.activeMachine.configuredConnectionTypes instead", "4.1")
- def activeMachineConfiguredConnectionTypes(self):
- if self._global_container_stack:
- return self._global_container_stack.configuredConnectionTypes
- return []
-
@pyqtProperty(bool, notify = printerConnectedStatusChanged)
def activeMachineIsGroup(self) -> bool:
return bool(self._printer_output_devices) and len(self._printer_output_devices[0].printers) > 1
@@ -607,44 +514,20 @@ class MachineManager(QObject):
return material.getId()
return ""
- ## Gets a dict with the active materials ids set in all extruder stacks and the global stack
- # (when there is one extruder, the material is set in the global stack)
- #
- # \return The material ids in all stacks
- @pyqtProperty("QVariantMap", notify = activeMaterialChanged)
- def allActiveMaterialIds(self) -> Dict[str, str]:
- result = {}
-
- active_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
- for stack in active_stacks:
- material_container = stack.material
- if not material_container:
- continue
- result[stack.getId()] = material_container.getId()
-
- return result
-
## Gets the layer height of the currently active quality profile.
#
# This is indicated together with the name of the active quality profile.
#
# \return The layer height of the currently active quality profile. If
- # there is no quality profile, this returns 0.
+ # there is no quality profile, this returns the default layer height.
@pyqtProperty(float, notify = activeQualityGroupChanged)
def activeQualityLayerHeight(self) -> float:
if not self._global_container_stack:
return 0
- if self._current_quality_changes_group:
- value = self._global_container_stack.getRawProperty("layer_height", "value", skip_until_container = self._global_container_stack.qualityChanges.getId())
- if isinstance(value, SettingFunction):
- value = value(self._global_container_stack)
- return value
- elif self._current_quality_group:
- value = self._global_container_stack.getRawProperty("layer_height", "value", skip_until_container = self._global_container_stack.quality.getId())
- if isinstance(value, SettingFunction):
- value = value(self._global_container_stack)
- return value
- return 0
+ value = self._global_container_stack.getRawProperty("layer_height", "value", skip_until_container = self._global_container_stack.qualityChanges.getId())
+ if isinstance(value, SettingFunction):
+ value = value(self._global_container_stack)
+ return value
@pyqtProperty(str, notify = activeVariantChanged)
def globalVariantName(self) -> str:
@@ -656,27 +539,57 @@ class MachineManager(QObject):
@pyqtProperty(str, notify = activeQualityGroupChanged)
def activeQualityType(self) -> str:
- quality_type = ""
- if self._active_container_stack:
- if self._current_quality_group:
- quality_type = self._current_quality_group.quality_type
- return quality_type
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if not global_stack:
+ return ""
+ return global_stack.quality.getMetaDataEntry("quality_type")
@pyqtProperty(bool, notify = activeQualityGroupChanged)
def isActiveQualitySupported(self) -> bool:
- is_supported = False
- if self._global_container_stack:
- if self._current_quality_group:
- is_supported = self._current_quality_group.is_available
- return is_supported
+ global_container_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if not global_container_stack:
+ return False
+ active_quality_group = self.activeQualityGroup()
+ if active_quality_group is None:
+ return False
+ return active_quality_group.is_available
@pyqtProperty(bool, notify = activeQualityGroupChanged)
def isActiveQualityExperimental(self) -> bool:
- is_experimental = False
- if self._global_container_stack:
- if self._current_quality_group:
- is_experimental = self._current_quality_group.is_experimental
- return is_experimental
+ global_container_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if not global_container_stack:
+ return False
+ active_quality_group = self.activeQualityGroup()
+ if active_quality_group is None:
+ return False
+ return active_quality_group.is_experimental
+
+ @pyqtProperty(str, notify = activeIntentChanged)
+ def activeIntentCategory(self) -> str:
+ global_container_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+
+ if not global_container_stack:
+ return ""
+ return global_container_stack.getIntentCategory()
+
+ # Provies a list of extruder positions that have a different intent from the active one.
+ @pyqtProperty("QStringList", notify=activeIntentChanged)
+ def extruderPositionsWithNonActiveIntent(self):
+ global_container_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+
+ if not global_container_stack:
+ return []
+
+ active_intent_category = self.activeIntentCategory
+ result = []
+ for extruder in global_container_stack.extruderList:
+ if not extruder.isEnabled:
+ continue
+ category = extruder.intent.getMetaDataEntry("intent_category", "default")
+ if category != active_intent_category:
+ result.append(str(int(extruder.getMetaDataEntry("position")) + 1))
+
+ return result
## Returns whether there is anything unsupported in the current set-up.
#
@@ -722,51 +635,14 @@ class MachineManager(QObject):
# Check if the value has to be replaced
extruder_stack.userChanges.setProperty(key, "value", new_value)
- @pyqtProperty(str, notify = activeVariantChanged)
- @deprecated("use Cura.MachineManager.activeStack.variant.name instead", "4.1")
- def activeVariantName(self) -> str:
- if self._active_container_stack:
- variant = self._active_container_stack.variant
- if variant:
- return variant.getName()
-
- return ""
-
- @pyqtProperty(str, notify = activeVariantChanged)
- @deprecated("use Cura.MachineManager.activeStack.variant.id instead", "4.1")
- def activeVariantId(self) -> str:
- if self._active_container_stack:
- variant = self._active_container_stack.variant
- if variant:
- return variant.getId()
-
- return ""
-
- @pyqtProperty(str, notify = activeVariantChanged)
- @deprecated("use Cura.MachineManager.activeMachine.variant.name instead", "4.1")
- def activeVariantBuildplateName(self) -> str:
- if self._global_container_stack:
- variant = self._global_container_stack.variant
- if variant:
- return variant.getName()
-
- return ""
-
- @pyqtProperty(str, notify = globalContainerChanged)
- @deprecated("use Cura.MachineManager.activeMachine.definition.id instead", "4.1")
- def activeDefinitionId(self) -> str:
- if self._global_container_stack:
- return self._global_container_stack.definition.id
-
- return ""
-
## Get the Definition ID to use to select quality profiles for the currently active machine
# \returns DefinitionID (string) if found, empty string otherwise
@pyqtProperty(str, notify = globalContainerChanged)
def activeQualityDefinitionId(self) -> str:
- if self._global_container_stack:
- return getMachineDefinitionIDForQualitySearch(self._global_container_stack.definition)
- return ""
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if not global_stack:
+ return ""
+ return ContainerTree.getInstance().machines[global_stack.definition.getId()].quality_definition
## Gets how the active definition calls variants
# Caveat: per-definition-variant-title is currently not translated (though the fallback is)
@@ -816,27 +692,6 @@ class MachineManager(QObject):
# This reuses the method and remove all printers recursively
self.removeMachine(hidden_containers[0].getId())
- @pyqtProperty(bool, notify = globalContainerChanged)
- @deprecated("use Cura.MachineManager.activeMachine.hasMaterials instead", "4.2")
- def hasMaterials(self) -> bool:
- if self._global_container_stack:
- return self._global_container_stack.hasMaterials
- return False
-
- @pyqtProperty(bool, notify = globalContainerChanged)
- @deprecated("use Cura.MachineManager.activeMachine.hasVariants instead", "4.2")
- def hasVariants(self) -> bool:
- if self._global_container_stack:
- return self._global_container_stack.hasVariants
- return False
-
- @pyqtProperty(bool, notify = globalContainerChanged)
- @deprecated("use Cura.MachineManager.activeMachine.hasVariantBuildplates instead", "4.2")
- def hasVariantBuildplates(self) -> bool:
- if self._global_container_stack:
- return self._global_container_stack.hasVariantBuildplates
- return False
-
## The selected buildplate is compatible if it is compatible with all the materials in all the extruders
@pyqtProperty(bool, notify = activeMaterialChanged)
def variantBuildplateCompatible(self) -> bool:
@@ -851,7 +706,8 @@ class MachineManager(QObject):
if material_container == empty_material_container:
continue
if material_container.getMetaDataEntry("buildplate_compatible"):
- buildplate_compatible = buildplate_compatible and material_container.getMetaDataEntry("buildplate_compatible")[self.activeVariantBuildplateName]
+ active_buildplate_name = self.activeMachine.variant.name
+ buildplate_compatible = buildplate_compatible and material_container.getMetaDataEntry("buildplate_compatible")[active_buildplate_name]
return buildplate_compatible
@@ -974,7 +830,7 @@ class MachineManager(QObject):
if settable_per_extruder:
limit_to_extruder = int(self._global_container_stack.getProperty(setting_key, "limit_to_extruder"))
extruder_position = max(0, limit_to_extruder)
- extruder_stack = self.getExtruder(extruder_position)
+ extruder_stack = self._global_container_stack.extruderList[extruder_position]
if extruder_stack:
extruder_stack.userChanges.setProperty(setting_key, "value", global_user_container.getProperty(setting_key, "value"))
else:
@@ -985,20 +841,6 @@ class MachineManager(QObject):
self._application.globalContainerStackChanged.emit()
self.forceUpdateAllSettings()
- @pyqtSlot(int, result = QObject)
- def getExtruder(self, position: int) -> Optional[ExtruderStack]:
- return self._getExtruder(position)
-
- # This is a workaround for the deprecated decorator and the pyqtSlot not playing well together.
- @deprecated("use Cura.MachineManager.activeMachine.extruders instead", "4.2")
- def _getExtruder(self, position) -> Optional[ExtruderStack]:
- if self._global_container_stack:
- try:
- return self._global_container_stack.extruderList[int(position)]
- except IndexError:
- return None
- return None
-
def updateDefaultExtruder(self) -> None:
if self._global_container_stack is None:
return
@@ -1030,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:
@@ -1049,10 +894,10 @@ class MachineManager(QObject):
@pyqtSlot(int, bool)
def setExtruderEnabled(self, position: int, enabled: bool) -> None:
- extruder = self.getExtruder(position)
- if not extruder or self._global_container_stack is None:
+ if self._global_container_stack is None:
Logger.log("w", "Could not find extruder on position %s", position)
return
+ extruder = self._global_container_stack.extruderList[position]
extruder.setEnabled(enabled)
self.updateDefaultExtruder()
@@ -1074,19 +919,19 @@ class MachineManager(QObject):
self.forceUpdateAllSettings()
# Also trigger the build plate compatibility to update
self.activeMaterialChanged.emit()
-
- def _onMachineNameChanged(self) -> None:
- self.globalContainerChanged.emit()
+ self.activeIntentChanged.emit()
def _onMaterialNameChanged(self) -> None:
self.activeMaterialChanged.emit()
+ ## Get the signals that signal that the containers changed for all stacks.
+ #
+ # This includes the global stack and all extruder stacks. So if any
+ # container changed anywhere.
def _getContainerChangedSignals(self) -> List[Signal]:
if self._global_container_stack is None:
return []
- stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
- stacks.append(self._global_container_stack)
- return [ s.containersChanged for s in stacks ]
+ return [s.containersChanged for s in ExtruderManager.getInstance().getActiveExtruderStacks() + [self._global_container_stack]]
@pyqtSlot(str, str, str)
def setSettingForAllExtruders(self, setting_name: str, property_name: str, property_value: str) -> None:
@@ -1106,13 +951,6 @@ class MachineManager(QObject):
container = extruder.userChanges
container.removeInstance(setting_name)
- @pyqtProperty("QVariantList", notify = globalContainerChanged)
- @deprecated("use Cura.MachineManager.activeMachine.extruders instead", "4.2")
- def currentExtruderPositions(self) -> List[str]:
- if self._global_container_stack is None:
- return []
- return sorted(list(self._global_container_stack.extruders.keys()))
-
## Update _current_root_material_id when the current root material was changed.
def _onRootMaterialChanged(self) -> None:
self._current_root_material_id = {}
@@ -1134,29 +972,12 @@ class MachineManager(QObject):
def currentRootMaterialId(self) -> Dict[str, str]:
return self._current_root_material_id
- ## Return the variant names in the extruder stack(s).
- ## For the variant in the global stack, use activeVariantBuildplateName
- @pyqtProperty("QVariant", notify = activeVariantChanged)
- def activeVariantNames(self) -> Dict[str, str]:
- result = {}
-
- active_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
- for stack in active_stacks:
- variant_container = stack.variant
- position = stack.getMetaDataEntry("position")
- if variant_container and variant_container != empty_variant_container:
- result[position] = variant_container.getName()
-
- return result
-
# Sets all quality and quality_changes containers to empty_quality and empty_quality_changes containers
# for all stacks in the currently active machine.
#
def _setEmptyQuality(self) -> None:
if self._global_container_stack is None:
return
- self._current_quality_group = None
- self._current_quality_changes_group = None
self._global_container_stack.quality = empty_quality_container
self._global_container_stack.qualityChanges = empty_quality_changes_container
for extruder in self._global_container_stack.extruderList:
@@ -1165,6 +986,7 @@ class MachineManager(QObject):
self.activeQualityGroupChanged.emit()
self.activeQualityChangesGroupChanged.emit()
+ self._updateIntentWithQuality()
def _setQualityGroup(self, quality_group: Optional["QualityGroup"], empty_quality_changes: bool = True) -> None:
if self._global_container_stack is None:
@@ -1173,40 +995,33 @@ class MachineManager(QObject):
self._setEmptyQuality()
return
- if quality_group.node_for_global is None or quality_group.node_for_global.getContainer() is None:
+ if quality_group.node_for_global is None or quality_group.node_for_global.container is None:
return
for node in quality_group.nodes_for_extruders.values():
- if node.getContainer() is None:
+ if node.container is None:
return
- self._current_quality_group = quality_group
- if empty_quality_changes:
- self._current_quality_changes_group = None
-
# Set quality and quality_changes for the GlobalStack
- self._global_container_stack.quality = quality_group.node_for_global.getContainer()
+ self._global_container_stack.quality = quality_group.node_for_global.container
if empty_quality_changes:
self._global_container_stack.qualityChanges = empty_quality_changes_container
# Set quality and quality_changes for each ExtruderStack
for position, node in quality_group.nodes_for_extruders.items():
- try:
- self._global_container_stack.extruderList[int(position)].quality = node.getContainer()
- if empty_quality_changes:
- self._global_container_stack.extruderList[int(position)].qualityChanges = empty_quality_changes_container
- except IndexError:
- continue # This can be ignored as in some cases the quality group gets set for an extruder that's not active (eg custom fff printer)
+ self._global_container_stack.extruders[str(position)].quality = node.container
+ if empty_quality_changes:
+ self._global_container_stack.extruders[str(position)].qualityChanges = empty_quality_changes_container
self.activeQualityGroupChanged.emit()
self.activeQualityChangesGroupChanged.emit()
+ self._updateIntentWithQuality()
def _fixQualityChangesGroupToNotSupported(self, quality_changes_group: "QualityChangesGroup") -> None:
- nodes = [quality_changes_group.node_for_global] + list(quality_changes_group.nodes_for_extruders.values())
- containers = [n.getContainer() for n in nodes if n is not None]
- for container in containers:
- if container:
- container.setMetaDataEntry("quality_type", "not_supported")
+ metadatas = [quality_changes_group.metadata_for_global] + list(quality_changes_group.metadata_per_extruder.values())
+ for metadata in metadatas:
+ metadata["quality_type"] = "not_supported" # This actually changes the metadata of the container since they are stored by reference!
quality_changes_group.quality_type = "not_supported"
+ quality_changes_group.intent_category = "default"
def _setQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup") -> None:
if self._global_container_stack is None:
@@ -1215,68 +1030,76 @@ class MachineManager(QObject):
# A custom quality can be created based on "not supported".
# In that case, do not set quality containers to empty.
quality_group = None
- if quality_type != "not_supported":
- quality_group_dict = self._quality_manager.getQualityGroups(self._global_container_stack)
- quality_group = quality_group_dict.get(quality_type)
+ if quality_type != "not_supported": # Find the quality group that the quality changes was based on.
+ quality_group = ContainerTree.getInstance().getCurrentQualityGroups().get(quality_type)
if quality_group is None:
self._fixQualityChangesGroupToNotSupported(quality_changes_group)
+ container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
quality_changes_container = empty_quality_changes_container
- quality_container = empty_quality_container # type: Optional[InstanceContainer]
- if quality_changes_group.node_for_global and quality_changes_group.node_for_global.getContainer():
- quality_changes_container = cast(InstanceContainer, quality_changes_group.node_for_global.getContainer())
- if quality_group is not None and quality_group.node_for_global and quality_group.node_for_global.getContainer():
- quality_container = quality_group.node_for_global.getContainer()
+ quality_container = empty_quality_container # type: InstanceContainer
+ if quality_changes_group.metadata_for_global:
+ global_containers = container_registry.findContainers(id = quality_changes_group.metadata_for_global["id"])
+ if global_containers:
+ quality_changes_container = global_containers[0]
+ if quality_changes_group.metadata_for_global:
+ containers = container_registry.findContainers(id = quality_changes_group.metadata_for_global["id"])
+ if containers:
+ quality_changes_container = cast(InstanceContainer, containers[0])
+ if quality_group is not None and quality_group.node_for_global and quality_group.node_for_global.container:
+ quality_container = quality_group.node_for_global.container
self._global_container_stack.quality = quality_container
self._global_container_stack.qualityChanges = quality_changes_container
- for extruder in self._global_container_stack.extruderList:
- position = int(extruder.getMetaDataEntry("position", "0"))
- quality_changes_node = quality_changes_group.nodes_for_extruders.get(position)
+ for position, extruder in self._global_container_stack.extruders.items():
quality_node = None
if quality_group is not None:
- quality_node = quality_group.nodes_for_extruders.get(position)
+ quality_node = quality_group.nodes_for_extruders.get(int(position))
quality_changes_container = empty_quality_changes_container
quality_container = empty_quality_container
- if quality_changes_node and quality_changes_node.getContainer():
- quality_changes_container = cast(InstanceContainer, quality_changes_node.getContainer())
- if quality_node and quality_node.getContainer():
- quality_container = quality_node.getContainer()
+ quality_changes_metadata = quality_changes_group.metadata_per_extruder.get(int(position))
+ if quality_changes_metadata:
+ containers = container_registry.findContainers(id = quality_changes_metadata["id"])
+ if containers:
+ quality_changes_container = cast(InstanceContainer, containers[0])
+ if quality_node and quality_node.container:
+ quality_container = quality_node.container
extruder.quality = quality_container
extruder.qualityChanges = quality_changes_container
- self._current_quality_group = quality_group
- self._current_quality_changes_group = quality_changes_group
+ self.setIntentByCategory(quality_changes_group.intent_category)
+
self.activeQualityGroupChanged.emit()
self.activeQualityChangesGroupChanged.emit()
- def _setVariantNode(self, position: str, container_node: "ContainerNode") -> None:
- if container_node.getContainer() is None or self._global_container_stack is None:
+ def _setVariantNode(self, position: str, variant_node: "VariantNode") -> None:
+ if self._global_container_stack is None:
return
- self._global_container_stack.extruderList[int(position)].variant = container_node.getContainer()
+ self._global_container_stack.extruders[position].variant = variant_node.container
self.activeVariantChanged.emit()
def _setGlobalVariant(self, container_node: "ContainerNode") -> None:
if self._global_container_stack is None:
return
- self._global_container_stack.variant = container_node.getContainer()
+ self._global_container_stack.variant = container_node.container
if not self._global_container_stack.variant:
self._global_container_stack.variant = self._application.empty_variant_container
- def _setMaterial(self, position: str, container_node: Optional["ContainerNode"] = None) -> None:
+ def _setMaterial(self, position: str, material_node: Optional["MaterialNode"] = None) -> None:
if self._global_container_stack is None:
return
- if container_node and container_node.getContainer():
- self._global_container_stack.extruderList[int(position)].material = container_node.getContainer()
- root_material_id = container_node.getMetaDataEntry("base_file", None)
+ if material_node and material_node.container:
+ material_container = material_node.container
+ self._global_container_stack.extruders[position].material = material_container
+ root_material_id = material_container.getMetaDataEntry("base_file", None)
else:
self._global_container_stack.extruderList[int(position)].material = empty_material_container
root_material_id = None
# The _current_root_material_id is used in the MaterialMenu to see which material is selected
- if root_material_id != self._current_root_material_id[position]:
+ if position not in self._current_root_material_id or root_material_id != self._current_root_material_id[position]:
self._current_root_material_id[position] = root_material_id
self.rootMaterialChanged.emit()
@@ -1293,13 +1116,12 @@ class MachineManager(QObject):
## Update current quality type and machine after setting material
def _updateQualityWithMaterial(self, *args: Any) -> None:
- if self._global_container_stack is None:
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if global_stack is None:
return
Logger.log("d", "Updating quality/quality_changes due to material change")
- current_quality_type = None
- if self._current_quality_group:
- current_quality_type = self._current_quality_group.quality_type
- candidate_quality_groups = self._quality_manager.getQualityGroups(self._global_container_stack)
+ current_quality_type = global_stack.quality.getMetaDataEntry("quality_type")
+ candidate_quality_groups = ContainerTree.getInstance().getCurrentQualityGroups()
available_quality_types = {qt for qt, g in candidate_quality_groups.items() if g.is_available}
Logger.log("d", "Current quality type = [%s]", current_quality_type)
@@ -1310,7 +1132,7 @@ class MachineManager(QObject):
return
if not available_quality_types:
- if self._current_quality_changes_group is None:
+ if global_stack.qualityChanges == empty_quality_changes_container:
Logger.log("i", "No available quality types found, setting all qualities to empty (Not Supported).")
self._setEmptyQuality()
return
@@ -1323,6 +1145,9 @@ class MachineManager(QObject):
# The current quality type is not available so we use the preferred quality type if it's available,
# otherwise use one of the available quality types.
quality_type = sorted(list(available_quality_types))[0]
+ if self._global_container_stack is None:
+ Logger.log("e", "Global stack not present!")
+ return
preferred_quality_type = self._global_container_stack.getMetaDataEntry("preferred_quality_type")
if preferred_quality_type in available_quality_types:
quality_type = preferred_quality_type
@@ -1331,7 +1156,40 @@ class MachineManager(QObject):
current_quality_type, quality_type)
self._setQualityGroup(candidate_quality_groups[quality_type], empty_quality_changes = True)
- def updateMaterialWithVariant(self, position: Optional[str]) -> None:
+ ## Update the current intent after the quality changed
+ def _updateIntentWithQuality(self):
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if global_stack is None:
+ return
+ Logger.log("d", "Updating intent due to quality change")
+
+ category = "default"
+
+ for extruder in global_stack.extruderList:
+ if not extruder.isEnabled:
+ continue
+ current_category = extruder.intent.getMetaDataEntry("intent_category", "default")
+ if current_category != "default" and current_category != category:
+ category = current_category
+ continue
+ # It's also possible that the qualityChanges has an opinion about the intent_category.
+ # This is in the case that a QC was made on an intent, but none of the materials have that intent.
+ # If the user switches back, we do want the intent to be selected again.
+ #
+ # Do not ask empty quality changes for intent category.
+ if extruder.qualityChanges.getId() == empty_quality_changes_container.getId():
+ continue
+ current_category = extruder.qualityChanges.getMetaDataEntry("intent_category", "default")
+ if current_category != "default" and current_category != category:
+ category = current_category
+ self.setIntentByCategory(category)
+
+ ## Update the material profile in the current stacks when the variant is
+ # changed.
+ # \param position The extruder stack to update. If provided with None, all
+ # extruder stacks will be updated.
+ @pyqtSlot()
+ def updateMaterialWithVariant(self, position: Optional[str] = None) -> None:
if self._global_container_stack is None:
return
if position is None:
@@ -1339,10 +1197,6 @@ class MachineManager(QObject):
else:
position_list = [position]
- buildplate_name = None
- if self._global_container_stack.variant.getId() != "empty_variant":
- buildplate_name = self._global_container_stack.variant.getName()
-
for position_item in position_list:
try:
extruder = self._global_container_stack.extruderList[int(position_item)]
@@ -1350,39 +1204,34 @@ class MachineManager(QObject):
continue
current_material_base_name = extruder.material.getMetaDataEntry("base_file")
- current_nozzle_name = None
- if extruder.variant.getId() != empty_variant_container.getId():
- current_nozzle_name = extruder.variant.getMetaDataEntry("name")
+ current_nozzle_name = extruder.variant.getMetaDataEntry("name")
- material_diameter = extruder.getCompatibleMaterialDiameter()
- candidate_materials = self._material_manager.getAvailableMaterials(
- self._global_container_stack.definition,
- current_nozzle_name,
- buildplate_name,
- material_diameter)
+ # If we can keep the current material after the switch, try to do so.
+ nozzle_node = ContainerTree.getInstance().machines[self._global_container_stack.definition.getId()].variants[current_nozzle_name]
+ candidate_materials = nozzle_node.materials
+ old_approximate_material_diameter = int(extruder.material.getMetaDataEntry("approximate_diameter", default = 3))
+ new_approximate_material_diameter = int(self._global_container_stack.extruderList[int(position_item)].getApproximateMaterialDiameter())
- if not candidate_materials:
- self._setMaterial(position_item, container_node = None)
- continue
-
- if current_material_base_name in candidate_materials:
+ # Only switch to the old candidate material if the approximate material diameter of the extruder stays the
+ # same.
+ if new_approximate_material_diameter == old_approximate_material_diameter and \
+ current_material_base_name in candidate_materials: # The current material is also available after the switch. Retain it.
new_material = candidate_materials[current_material_base_name]
self._setMaterial(position_item, new_material)
- continue
-
- # The current material is not available, find the preferred one
- material_node = self._material_manager.getDefaultMaterial(self._global_container_stack, position_item, current_nozzle_name)
- if material_node is not None:
+ else:
+ # The current material is not available, find the preferred one.
+ approximate_material_diameter = int(self._global_container_stack.extruderList[int(position_item)].getApproximateMaterialDiameter())
+ material_node = nozzle_node.preferredMaterial(approximate_material_diameter)
self._setMaterial(position_item, material_node)
## Given a printer definition name, select the right machine instance. In case it doesn't exist, create a new
# instance with the same network key.
@pyqtSlot(str)
def switchPrinterType(self, machine_name: str) -> None:
- Logger.log("i", "Attempting to switch the printer type to [%s]", machine_name)
# Don't switch if the user tries to change to the same type of printer
- if self._global_container_stack is None or self.activeMachineDefinitionName == machine_name:
+ if self._global_container_stack is None or self._global_container_stack.definition.name == machine_name:
return
+ Logger.log("i", "Attempting to switch the printer type to [%s]", machine_name)
# Get the definition id corresponding to this machine name
machine_definition_id = CuraContainerRegistry.getInstance().findDefinitionContainers(name = machine_name)[0].getId()
# Try to find a machine with the same network key
@@ -1398,6 +1247,8 @@ class MachineManager(QObject):
if metadata_key in new_machine.getMetaData():
continue # Don't copy the already preset stuff.
new_machine.setMetaDataEntry(metadata_key, self._global_container_stack.getMetaDataEntry(metadata_key))
+ # Special case, group_id should be overwritten!
+ new_machine.setMetaDataEntry("group_id", self._global_container_stack.getMetaDataEntry("group_id"))
else:
Logger.log("i", "Found a %s with the key %s. Let's use it!", machine_name, self.activeMachineNetworkKey())
@@ -1412,6 +1263,7 @@ class MachineManager(QObject):
if self._global_container_stack is None:
return
self.blurSettings.emit()
+ container_registry = CuraContainerRegistry.getInstance()
with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue):
self.switchPrinterType(configuration.printerType)
@@ -1446,36 +1298,27 @@ class MachineManager(QObject):
disabled_used_extruder_position_set.add(int(position))
else:
- variant_container_node = self._variant_manager.getVariantNode(self._global_container_stack.definition.getId(),
- extruder_configuration.hotendID)
- material_container_node = self._material_manager.getMaterialNodeByType(self._global_container_stack,
- position,
- extruder_configuration.hotendID,
- configuration.buildplateConfiguration,
- extruder_configuration.material.guid)
- if variant_container_node:
- self._setVariantNode(position, variant_container_node)
- else:
- self._global_container_stack.extruderList[int(position)].variant = empty_variant_container
+ machine_node = ContainerTree.getInstance().machines.get(self._global_container_stack.definition.getId())
+ variant_node = machine_node.variants.get(extruder_configuration.hotendID)
+ if variant_node is None:
+ continue
+ self._setVariantNode(position, variant_node)
- if material_container_node:
- self._setMaterial(position, material_container_node)
- else:
- self._global_container_stack.extruderList[int(position)].material = empty_material_container
- self._global_container_stack.extruderList[int(position)].setEnabled(True)
+ # Find the material profile that the printer has stored.
+ # This might find one of the duplicates if the user duplicated the material to sync with. But that's okay; both have this GUID so both are correct.
+ approximate_diameter = int(self._global_container_stack.extruderList[int(position)].getApproximateMaterialDiameter())
+ materials_with_guid = container_registry.findInstanceContainersMetadata(GUID = extruder_configuration.material.guid, approximate_diameter = str(approximate_diameter), ignore_case = True)
+ material_container_node = variant_node.preferredMaterial(approximate_diameter)
+ if materials_with_guid: # We also have the material profile that the printer wants to share.
+ base_file = materials_with_guid[0]["base_file"]
+ material_container_node = variant_node.materials.get(base_file, material_container_node)
+
+ self._setMaterial(position, material_container_node)
+ self._global_container_stack.extruders[position].setEnabled(True)
self.updateMaterialWithVariant(position)
self.updateDefaultExtruder()
self.updateNumberExtrudersEnabled()
-
- if configuration.buildplateConfiguration is not None:
- global_variant_container_node = self._variant_manager.getBuildplateVariantNode(self._global_container_stack.definition.getId(), configuration.buildplateConfiguration)
- if global_variant_container_node:
- self._setGlobalVariant(global_variant_container_node)
- else:
- self._global_container_stack.variant = empty_variant_container
- else:
- self._global_container_stack.variant = empty_variant_container
self._updateQualityWithMaterial()
if need_to_show_message:
@@ -1509,17 +1352,12 @@ class MachineManager(QObject):
def setMaterialById(self, position: str, root_material_id: str) -> None:
if self._global_container_stack is None:
return
- buildplate_name = None
- if self._global_container_stack.variant.getId() != "empty_variant":
- buildplate_name = self._global_container_stack.variant.getName()
machine_definition_id = self._global_container_stack.definition.id
position = str(position)
extruder_stack = self._global_container_stack.extruderList[int(position)]
nozzle_name = extruder_stack.variant.getName()
- material_diameter = extruder_stack.getApproximateMaterialDiameter()
- material_node = self._material_manager.getMaterialNode(machine_definition_id, nozzle_name, buildplate_name,
- material_diameter, root_material_id)
+ material_node = ContainerTree.getInstance().machines[machine_definition_id].variants[nozzle_name].materials[root_material_id]
self.setMaterial(position, material_node)
## Global_stack: if you want to provide your own global_stack instead of the current active one
@@ -1527,7 +1365,7 @@ class MachineManager(QObject):
@pyqtSlot(str, "QVariant")
def setMaterial(self, position: str, container_node, global_stack: Optional["GlobalStack"] = None) -> None:
if global_stack is not None and global_stack != self._global_container_stack:
- global_stack.extruderList[int(position)].material = container_node.getContainer()
+ global_stack.extruders[position].material = container_node.container
return
position = str(position)
self.blurSettings.emit()
@@ -1544,15 +1382,16 @@ class MachineManager(QObject):
if self._global_container_stack is None:
return
machine_definition_id = self._global_container_stack.definition.id
- variant_node = self._variant_manager.getVariantNode(machine_definition_id, variant_name)
+ machine_node = ContainerTree.getInstance().machines.get(machine_definition_id)
+ variant_node = machine_node.variants.get(variant_name)
self.setVariant(position, variant_node)
@pyqtSlot(str, "QVariant")
- def setVariant(self, position: str, container_node: "ContainerNode") -> None:
+ def setVariant(self, position: str, variant_node: "VariantNode") -> None:
position = str(position)
self.blurSettings.emit()
with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue):
- self._setVariantNode(position, container_node)
+ self._setVariantNode(position, variant_node)
self.updateMaterialWithVariant(position)
self._updateQualityWithMaterial()
@@ -1565,9 +1404,7 @@ class MachineManager(QObject):
if self._global_container_stack is None:
return
# Get all the quality groups for this global stack and filter out by quality_type
- quality_group_dict = self._quality_manager.getQualityGroups(self._global_container_stack)
- quality_group = quality_group_dict[quality_type]
- self.setQualityGroup(quality_group)
+ self.setQualityGroup(ContainerTree.getInstance().getCurrentQualityGroups()[quality_type])
## Optionally provide global_stack if you want to use your own
# The active global_stack is treated differently.
@@ -1581,11 +1418,11 @@ class MachineManager(QObject):
Logger.log("e", "Could not set quality group [%s] because it has no node_for_global", str(quality_group))
return
# This is not changing the quality for the active machine !!!!!!!!
- global_stack.quality = quality_group.node_for_global.getContainer()
- for extruder_nr, extruder_stack in global_stack.extruders.items():
+ global_stack.quality = quality_group.node_for_global.container
+ for extruder_nr, extruder_stack in enumerate(global_stack.extruderList):
quality_container = empty_quality_container
if extruder_nr in quality_group.nodes_for_extruders:
- container = quality_group.nodes_for_extruders[extruder_nr].getContainer()
+ container = quality_group.nodes_for_extruders[extruder_nr].container
quality_container = container if container is not None else quality_container
extruder_stack.quality = quality_container
return
@@ -1598,9 +1435,91 @@ class MachineManager(QObject):
if not no_dialog and self.hasUserSettings and self._application.getPreferences().getValue("cura/active_mode") == 1:
self._application.discardOrKeepProfileChanges()
- @pyqtProperty(QObject, fset = setQualityGroup, notify = activeQualityGroupChanged)
+ # The display name map of currently active quality.
+ # The display name has 2 parts, a main part and a suffix part.
+ # This display name is:
+ # - For built-in qualities (quality/intent): the quality type name, such as "Fine", "Normal", etc.
+ # - For custom qualities: - -
+ # Examples:
+ # - "my_profile - Fine" (only based on a default quality, no intent involved)
+ # - "my_profile - Engineering - Fine" (based on an intent)
+ @pyqtProperty("QVariantMap", notify = activeQualityDisplayNameChanged)
+ def activeQualityDisplayNameMap(self) -> Dict[str, str]:
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if global_stack is None:
+ return {"main": "",
+ "suffix": ""}
+
+ display_name = global_stack.quality.getName()
+
+ intent_category = self.activeIntentCategory
+ if intent_category != "default":
+ intent_display_name = IntentCategoryModel.translation(intent_category,
+ "name",
+ catalog.i18nc("@label", "Unknown"))
+ display_name = "{intent_name} - {the_rest}".format(intent_name = intent_display_name,
+ the_rest = display_name)
+
+ main_part = display_name
+ suffix_part = ""
+
+ # Not a custom quality
+ if global_stack.qualityChanges != empty_quality_changes_container:
+ main_part = self.activeQualityOrQualityChangesName
+ suffix_part = display_name
+
+ return {"main": main_part,
+ "suffix": suffix_part}
+
+ ## Change the intent category of the current printer.
+ #
+ # All extruders can change their profiles. If an intent profile is
+ # available with the desired intent category, that one will get chosen.
+ # Otherwise the intent profile will be left to the empty profile, which
+ # represents the "default" intent category.
+ # \param intent_category The intent category to change to.
+ @pyqtSlot(str)
+ def setIntentByCategory(self, intent_category: str) -> None:
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if global_stack is None:
+ return
+ container_tree = ContainerTree.getInstance()
+ for extruder in global_stack.extruderList:
+ definition_id = global_stack.definition.getId()
+ variant_name = extruder.variant.getName()
+ material_base_file = extruder.material.getMetaDataEntry("base_file")
+ quality_id = extruder.quality.getId()
+ if quality_id == empty_quality_container.getId():
+ extruder.intent = empty_intent_container
+ continue
+ quality_node = container_tree.machines[definition_id].variants[variant_name].materials[material_base_file].qualities[quality_id]
+
+ for intent_node in quality_node.intents.values():
+ if intent_node.intent_category == intent_category: # Found an intent with the correct category.
+ extruder.intent = intent_node.container
+ break
+ else: # No intent had the correct category.
+ extruder.intent = empty_intent_container
+
+ ## Get the currently activated quality group.
+ #
+ # If no printer is added yet or the printer doesn't have quality profiles,
+ # this returns ``None``.
+ # \return The currently active quality group.
def activeQualityGroup(self) -> Optional["QualityGroup"]:
- return self._current_quality_group
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if not global_stack or global_stack.quality == empty_quality_container:
+ return None
+ return ContainerTree.getInstance().getCurrentQualityGroups().get(self.activeQualityType)
+
+ ## Get the name of the active quality group.
+ # \return The name of the active quality group.
+ @pyqtProperty(str, notify = activeQualityGroupChanged)
+ def activeQualityGroupName(self) -> str:
+ quality_group = self.activeQualityGroup()
+ if quality_group is None:
+ return ""
+ return quality_group.getName()
@pyqtSlot(QObject)
def setQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup", no_dialog: bool = False) -> None:
@@ -1617,30 +1536,50 @@ class MachineManager(QObject):
if self._global_container_stack is None:
return
with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue):
- self._setQualityGroup(self._current_quality_group)
+ self._setQualityGroup(self.activeQualityGroup())
for stack in [self._global_container_stack] + list(self._global_container_stack.extruders.values()):
stack.userChanges.clear()
@pyqtProperty(QObject, fset = setQualityChangesGroup, notify = activeQualityChangesGroupChanged)
def activeQualityChangesGroup(self) -> Optional["QualityChangesGroup"]:
- return self._current_quality_changes_group
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if global_stack is None or global_stack.qualityChanges == empty_quality_changes_container:
+ return None
+
+ all_group_list = ContainerTree.getInstance().getCurrentQualityChangesGroups()
+ the_group = None
+ for group in all_group_list: # Match on the container ID of the global stack to find the quality changes group belonging to the active configuration.
+ if group.metadata_for_global and group.metadata_for_global["id"] == global_stack.qualityChanges.getId():
+ the_group = group
+ break
+
+ return the_group
@pyqtProperty(bool, notify = activeQualityChangesGroupChanged)
def hasCustomQuality(self) -> bool:
- return self._current_quality_changes_group is not None
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ return global_stack is None or global_stack.qualityChanges != empty_quality_changes_container
@pyqtProperty(str, notify = activeQualityGroupChanged)
def activeQualityOrQualityChangesName(self) -> str:
- name = empty_quality_container.getName()
- if self._current_quality_changes_group:
- name = self._current_quality_changes_group.name
- elif self._current_quality_group:
- name = self._current_quality_group.name
- return name
+ global_container_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if not global_container_stack:
+ return empty_quality_container.getName()
+ if global_container_stack.qualityChanges != empty_quality_changes_container:
+ return global_container_stack.qualityChanges.getName()
+ return global_container_stack.quality.getName()
@pyqtProperty(bool, notify = activeQualityGroupChanged)
def hasNotSupportedQuality(self) -> bool:
- return self._current_quality_group is None and self._current_quality_changes_group is None
+ global_container_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ return (not global_container_stack is None) and global_container_stack.quality == empty_quality_container and global_container_stack.qualityChanges == empty_quality_changes_container
+
+ @pyqtProperty(bool, notify = activeQualityGroupChanged)
+ def isActiveQualityCustom(self) -> bool:
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if global_stack is None:
+ return False
+ return global_stack.qualityChanges != empty_quality_changes_container
def _updateUponMaterialMetadataChange(self) -> None:
if self._global_container_stack is None:
@@ -1667,7 +1606,3 @@ class MachineManager(QObject):
abbr_machine += stripped_word
return abbr_machine
-
- # Gets all machines that belong to the given group_id.
- def getMachinesInGroup(self, group_id: str) -> List["GlobalStack"]:
- return self._container_registry.findContainerStacks(type = "machine", group_id = group_id)
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/Settings/cura_empty_instance_containers.py b/cura/Settings/cura_empty_instance_containers.py
index 0eedfc8654..b142c53c11 100644
--- a/cura/Settings/cura_empty_instance_containers.py
+++ b/cura/Settings/cura_empty_instance_containers.py
@@ -25,6 +25,9 @@ EMPTY_MATERIAL_CONTAINER_ID = "empty_material"
empty_material_container = copy.deepcopy(empty_container)
empty_material_container.setMetaDataEntry("id", EMPTY_MATERIAL_CONTAINER_ID)
empty_material_container.setMetaDataEntry("type", "material")
+empty_material_container.setMetaDataEntry("base_file", "empty_material")
+empty_material_container.setMetaDataEntry("GUID", "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF")
+empty_material_container.setMetaDataEntry("material", "empty")
# Empty quality
EMPTY_QUALITY_CONTAINER_ID = "empty_quality"
@@ -41,6 +44,15 @@ empty_quality_changes_container = copy.deepcopy(empty_container)
empty_quality_changes_container.setMetaDataEntry("id", EMPTY_QUALITY_CHANGES_CONTAINER_ID)
empty_quality_changes_container.setMetaDataEntry("type", "quality_changes")
empty_quality_changes_container.setMetaDataEntry("quality_type", "not_supported")
+empty_quality_changes_container.setMetaDataEntry("intent_category", "not_supported")
+
+# Empty intent
+EMPTY_INTENT_CONTAINER_ID = "empty_intent"
+empty_intent_container = copy.deepcopy(empty_container)
+empty_intent_container.setMetaDataEntry("id", EMPTY_INTENT_CONTAINER_ID)
+empty_intent_container.setMetaDataEntry("type", "intent")
+empty_intent_container.setMetaDataEntry("intent_category", "default")
+empty_intent_container.setName(catalog.i18nc("@info:No intent profile selected", "Default"))
# All empty container IDs set
@@ -51,6 +63,7 @@ ALL_EMPTY_CONTAINER_ID_SET = {
EMPTY_MATERIAL_CONTAINER_ID,
EMPTY_QUALITY_CONTAINER_ID,
EMPTY_QUALITY_CHANGES_CONTAINER_ID,
+ EMPTY_INTENT_CONTAINER_ID
}
@@ -73,4 +86,6 @@ __all__ = ["EMPTY_CONTAINER_ID",
"empty_quality_container",
"ALL_EMPTY_CONTAINER_ID_SET",
"isEmptyContainer",
+ "EMPTY_INTENT_CONTAINER_ID",
+ "empty_intent_container"
]
diff --git a/cura/UI/CuraSplashScreen.py b/cura/UI/CuraSplashScreen.py
index 77c9ad1427..05231c106d 100644
--- a/cura/UI/CuraSplashScreen.py
+++ b/cura/UI/CuraSplashScreen.py
@@ -56,11 +56,11 @@ class CuraSplashScreen(QSplashScreen):
if buildtype:
version[0] += " (%s)" % buildtype
- # draw version text
+ # Draw version text
font = QFont() # Using system-default font here
font.setPixelSize(37)
painter.setFont(font)
- painter.drawText(215, 66, 330 * self._scale, 230 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[0])
+ painter.drawText(60, 66, 330 * self._scale, 230 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[0])
if len(version) > 1:
font.setPixelSize(16)
painter.setFont(font)
@@ -68,14 +68,14 @@ class CuraSplashScreen(QSplashScreen):
painter.drawText(247, 105, 330 * self._scale, 255 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[1])
painter.setPen(QColor(255, 255, 255, 255))
- # draw the loading image
+ # Draw the loading image
pen = QPen()
pen.setWidth(6 * self._scale)
pen.setColor(QColor(32, 166, 219, 255))
painter.setPen(pen)
painter.drawArc(60, 150, 32 * self._scale, 32 * self._scale, self._loading_image_rotation_angle * 16, 300 * 16)
- # draw message text
+ # Draw message text
if self._current_message:
font = QFont() # Using system-default font here
font.setPixelSize(13)
diff --git a/cura/UI/MachineSettingsManager.py b/cura/UI/MachineSettingsManager.py
index 7ecd9ed65f..671bb0ece0 100644
--- a/cura/UI/MachineSettingsManager.py
+++ b/cura/UI/MachineSettingsManager.py
@@ -2,11 +2,12 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional, TYPE_CHECKING
-
from PyQt5.QtCore import QObject, pyqtSlot
from UM.i18n import i18nCatalog
+from cura.Machines.ContainerTree import ContainerTree
+
if TYPE_CHECKING:
from cura.CuraApplication import CuraApplication
@@ -42,7 +43,7 @@ class MachineSettingsManager(QObject):
# it was moved to the machine manager instead. Now this method just calls the machine manager.
self._application.getMachineManager().setActiveMachineExtruderCount(extruder_count)
- # Function for the Machine Settings panel (QML) to update after the usre changes "Number of Extruders".
+ # Function for the Machine Settings panel (QML) to update after the user changes "Number of Extruders".
#
# fieldOfView: The Ultimaker 2 family (not 2+) does not have materials in Cura by default, because the material is
# to be set on the printer. But when switching to Marlin flavor, the printer firmware can not change/insert material
@@ -51,8 +52,6 @@ class MachineSettingsManager(QObject):
@pyqtSlot()
def updateHasMaterialsMetadata(self):
machine_manager = self._application.getMachineManager()
- material_manager = self._application.getMaterialManager()
-
global_stack = machine_manager.activeMachine
definition = global_stack.definition
@@ -76,7 +75,10 @@ class MachineSettingsManager(QObject):
# set materials
for position in extruder_positions:
if has_materials:
- material_node = material_manager.getDefaultMaterial(global_stack, position, None)
+ extruder = global_stack.extruderList[int(position)]
+ approximate_diameter = extruder.getApproximateMaterialDiameter()
+ variant_node = ContainerTree.getInstance().machines[global_stack.definition.getId()].variants[extruder.variant.getName()]
+ material_node = variant_node.preferredMaterial(approximate_diameter)
machine_manager.setMaterial(position, material_node)
self.forceUpdate()
diff --git a/cura/Utils/Decorators.py b/cura/Utils/Decorators.py
new file mode 100644
index 0000000000..9275ee6ce9
--- /dev/null
+++ b/cura/Utils/Decorators.py
@@ -0,0 +1,30 @@
+# Copyright (c) 2019 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+import functools
+import re
+from typing import Callable
+
+# An API version must be a semantic version "x.y.z" where ".z" is optional. So the valid formats are as follows:
+# - x.y.z
+# - x.y
+SEMANTIC_VERSION_REGEX = re.compile(r"^[0-9]+\.[0-9]+(\.[0-9]+)?$")
+
+
+## Decorator for functions that belong to a set of APIs. For now, this should only be used for officially supported
+# APIs, meaning that those APIs should be versioned and maintained.
+#
+# \param since_version The earliest version since when this API becomes supported. This means that since this version,
+# this API function is supposed to behave the same. This parameter is not used. It's just a
+# documentation.
+def api(since_version: str) -> Callable:
+ # Make sure that APi versions are semantic versions
+ if not SEMANTIC_VERSION_REGEX.fullmatch(since_version):
+ raise ValueError("API since_version [%s] is not a semantic version." % since_version)
+
+ def api_decorator(function):
+ @functools.wraps(function)
+ def api_wrapper(*args, **kwargs):
+ return function(*args, **kwargs)
+ return api_wrapper
+ return api_decorator
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/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py
index b81d0858a4..20eb9b29dc 100755
--- a/plugins/3MFReader/ThreeMFReader.py
+++ b/plugins/3MFReader/ThreeMFReader.py
@@ -19,12 +19,12 @@ from UM.Scene.SceneNode import SceneNode #For typing.
from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
from cura.CuraApplication import CuraApplication
+from cura.Machines.ContainerTree import ContainerTree
from cura.Settings.ExtruderManager import ExtruderManager
from cura.Scene.CuraSceneNode import CuraSceneNode
from cura.Scene.BuildPlateDecorator import BuildPlateDecorator
from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator
from cura.Scene.ZOffsetDecorator import ZOffsetDecorator
-from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch
try:
@@ -131,7 +131,7 @@ class ThreeMFReader(MeshReader):
um_node.callDecoration("setActiveExtruder", default_stack.getId())
# Get the definition & set it
- definition_id = getMachineDefinitionIDForQualitySearch(global_container_stack.definition)
+ definition_id = ContainerTree.getInstance().machines[global_container_stack.definition.getId()].quality_definition
um_node.callDecoration("getStack").getTop().setDefinition(definition_id)
setting_container = um_node.callDecoration("getStack").getTop()
diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py
index 7154a114a9..dd35484c31 100755
--- a/plugins/3MFReader/ThreeMFWorkspaceReader.py
+++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py
@@ -1,10 +1,10 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from configparser import ConfigParser
import zipfile
import os
-from typing import Dict, List, Tuple, cast
+from typing import cast, Dict, List, Optional, Tuple
import xml.etree.ElementTree as ET
@@ -14,7 +14,6 @@ from UM.Application import Application
from UM.Logger import Logger
from UM.Message import Message
from UM.i18n import i18nCatalog
-from UM.Signal import postponeSignals, CompressTechnique
from UM.Settings.ContainerFormatError import ContainerFormatError
from UM.Settings.ContainerStack import ContainerStack
from UM.Settings.DefinitionContainer import DefinitionContainer
@@ -24,11 +23,12 @@ from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
from UM.Job import Job
from UM.Preferences import Preferences
-from cura.Machines.VariantType import VariantType
+from cura.Machines.ContainerTree import ContainerTree
from cura.Settings.CuraStackBuilder import CuraStackBuilder
from cura.Settings.ExtruderManager import ExtruderManager
from cura.Settings.ExtruderStack import ExtruderStack
from cura.Settings.GlobalStack import GlobalStack
+from cura.Settings.IntentManager import IntentManager
from cura.Settings.CuraContainerStack import _ContainerIndexes
from cura.CuraApplication import CuraApplication
from cura.Utils.Threading import call_on_qt_thread
@@ -41,7 +41,7 @@ i18n_catalog = i18nCatalog("cura")
class ContainerInfo:
- def __init__(self, file_name: str, serialized: str, parser: ConfigParser) -> None:
+ def __init__(self, file_name: Optional[str], serialized: Optional[str], parser: Optional[ConfigParser]) -> None:
self.file_name = file_name
self.serialized = serialized
self.parser = parser
@@ -65,6 +65,7 @@ class MachineInfo:
self.metadata_dict = {} # type: Dict[str, str]
self.quality_type = None
+ self.intent_category = None
self.custom_quality_name = None
self.quality_changes_info = None
self.variant_info = None
@@ -84,6 +85,7 @@ class ExtruderInfo:
self.definition_changes_info = None
self.user_changes_info = None
+ self.intent_info = None
## Base implementation for reading 3MF workspace files.
@@ -266,6 +268,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
instance_container_files = [name for name in cura_file_names if name.endswith(self._instance_container_suffix)]
quality_name = ""
custom_quality_name = ""
+ intent_name = ""
+ intent_category = ""
num_settings_overridden_by_quality_changes = 0 # How many settings are changed by the quality changes
num_user_settings = 0
quality_changes_conflict = False
@@ -323,6 +327,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
elif container_type == "quality":
if not quality_name:
quality_name = parser["general"]["name"]
+ elif container_type == "intent":
+ if not intent_name:
+ intent_name = parser["general"]["name"]
+ intent_category = parser["metadata"]["intent_category"]
elif container_type == "user":
num_user_settings += len(parser["values"])
elif container_type in self._ignored_instance_container_types:
@@ -348,6 +356,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
# To simplify this, only check if the global stack exists or not
global_stack_id = self._stripFileToId(global_stack_file)
serialized = archive.open(global_stack_file).read().decode("utf-8")
+ serialized = GlobalStack._updateSerialized(serialized, global_stack_file)
machine_name = self._getMachineNameFromSerializedStack(serialized)
self._machine_info.metadata_dict = self._getMetaDataDictFromSerializedStack(serialized)
@@ -444,6 +453,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
extruder_info.user_changes_info = instance_container_info_dict[user_changes_id]
self._machine_info.extruder_info_dict[position] = extruder_info
+ intent_id = parser["containers"][str(_ContainerIndexes.Intent)]
+ if intent_id not in ("empty", "empty_intent"):
+ extruder_info.intent_info = instance_container_info_dict[intent_id]
+
if not machine_conflict and containers_found_dict["machine"]:
if position not in global_stack.extruders:
continue
@@ -508,6 +521,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
self._machine_info.definition_id = machine_definition_id
self._machine_info.quality_type = quality_type
self._machine_info.custom_quality_name = quality_name
+ self._machine_info.intent_category = intent_category
if machine_conflict and not self._is_same_machine_type:
machine_conflict = False
@@ -528,6 +542,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
self._dialog.setNumVisibleSettings(num_visible_settings)
self._dialog.setQualityName(quality_name)
self._dialog.setQualityType(quality_type)
+ self._dialog.setIntentName(intent_name)
self._dialog.setNumSettingsOverriddenByQualityChanges(num_settings_overridden_by_quality_changes)
self._dialog.setNumUserSettings(num_user_settings)
self._dialog.setActiveMode(active_mode)
@@ -571,26 +586,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
# \param file_name
@call_on_qt_thread
def read(self, file_name):
- container_registry = ContainerRegistry.getInstance()
- signals = [container_registry.containerAdded,
- container_registry.containerRemoved,
- container_registry.containerMetaDataChanged]
- #
- # We now have different managers updating their lookup tables upon container changes. It is critical to make
- # sure that the managers have a complete set of data when they update.
- #
- # In project loading, lots of the container-related signals are loosely emitted, which can create timing gaps
- # for incomplete data update or other kinds of issues to happen.
- #
- # To avoid this, we postpone all signals so they don't get emitted immediately. But, please also be aware that,
- # because of this, do not expect to have the latest data in the lookup tables in project loading.
- #
- with postponeSignals(*signals, compress = CompressTechnique.NoCompression):
- return self._read(file_name)
-
- def _read(self, file_name):
application = CuraApplication.getInstance()
- material_manager = application.getMaterialManager()
archive = zipfile.ZipFile(file_name, "r")
@@ -688,7 +684,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
if self._resolve_strategies["material"] == "override":
# Remove the old materials and then deserialize the one from the project
root_material_id = material_container.getMetaDataEntry("base_file")
- material_manager.removeMaterialByRootId(root_material_id)
+ application.getContainerRegistry().removeContainer(root_material_id)
elif self._resolve_strategies["material"] == "new":
# Note that we *must* deserialize it with a new ID, as multiple containers will be
# auto created & added.
@@ -742,9 +738,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
if self._machine_info.quality_changes_info is None:
return
- application = CuraApplication.getInstance()
- quality_manager = application.getQualityManager()
-
# If we have custom profiles, load them
quality_changes_name = self._machine_info.quality_changes_info.name
if self._machine_info.quality_changes_info is not None:
@@ -752,12 +745,12 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
self._machine_info.quality_changes_info.name)
# Get the correct extruder definition IDs for quality changes
- from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch
- machine_definition_id_for_quality = getMachineDefinitionIDForQualitySearch(global_stack.definition)
+ machine_definition_id_for_quality = ContainerTree.getInstance().machines[global_stack.definition.getId()].quality_definition
machine_definition_for_quality = self._container_registry.findDefinitionContainers(id = machine_definition_id_for_quality)[0]
quality_changes_info = self._machine_info.quality_changes_info
quality_changes_quality_type = quality_changes_info.global_info.parser["metadata"]["quality_type"]
+ quality_changes_intent_category_per_extruder = {position: info.parser["metadata"].get("intent_category", "default") for position, info in quality_changes_info.extruder_info_dict.items()}
quality_changes_name = quality_changes_info.name
create_new = self._resolve_strategies.get("quality_changes") != "override"
@@ -768,13 +761,12 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
quality_changes_name = self._container_registry.uniqueName(quality_changes_name)
for position, container_info in container_info_dict.items():
extruder_stack = None
+ intent_category = None # type: Optional[str]
if position is not None:
extruder_stack = global_stack.extruders[position]
- container = quality_manager._createQualityChanges(quality_changes_quality_type,
- quality_changes_name,
- global_stack, extruder_stack)
+ intent_category = quality_changes_intent_category_per_extruder[position]
+ container = self._createNewQualityChanges(quality_changes_quality_type, intent_category, quality_changes_name, global_stack, extruder_stack)
container_info.container = container
- container.setDirty(True)
self._container_registry.addContainer(container)
Logger.log("d", "Created new quality changes container [%s]", container.getId())
@@ -802,11 +794,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
if not global_stack.extruders:
ExtruderManager.getInstance().fixSingleExtrusionMachineExtruderDefinition(global_stack)
extruder_stack = global_stack.extruders["0"]
+ intent_category = quality_changes_intent_category_per_extruder["0"]
- container = quality_manager._createQualityChanges(quality_changes_quality_type, quality_changes_name,
- global_stack, extruder_stack)
+ container = self._createNewQualityChanges(quality_changes_quality_type, intent_category, quality_changes_name, global_stack, extruder_stack)
container_info.container = container
- container.setDirty(True)
self._container_registry.addContainer(container)
Logger.log("d", "Created new quality changes container [%s]", container.getId())
@@ -832,10 +823,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
if container_info.container is None:
extruder_stack = global_stack.extruders[position]
- container = quality_manager._createQualityChanges(quality_changes_quality_type, quality_changes_name,
- global_stack, extruder_stack)
+ intent_category = quality_changes_intent_category_per_extruder[position]
+ container = self._createNewQualityChanges(quality_changes_quality_type, intent_category, quality_changes_name, global_stack, extruder_stack)
container_info.container = container
- container.setDirty(True)
self._container_registry.addContainer(container)
for key, value in container_info.parser["values"].items():
@@ -843,6 +833,45 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
self._machine_info.quality_changes_info.name = quality_changes_name
+ ## Helper class to create a new quality changes profile.
+ #
+ # This will then later be filled with the appropriate data.
+ # \param quality_type The quality type of the new profile.
+ # \param intent_category The intent category of the new profile.
+ # \param name The name for the profile. This will later be made unique so
+ # it doesn't need to be unique yet.
+ # \param global_stack The global stack showing the configuration that the
+ # profile should be created for.
+ # \param extruder_stack The extruder stack showing the configuration that
+ # the profile should be created for. If this is None, it will be created
+ # for the global stack.
+ def _createNewQualityChanges(self, quality_type: str, intent_category: Optional[str], name: str, global_stack: GlobalStack, extruder_stack: Optional[ExtruderStack]) -> InstanceContainer:
+ container_registry = CuraApplication.getInstance().getContainerRegistry()
+ base_id = global_stack.definition.getId() if extruder_stack is None else extruder_stack.getId()
+ new_id = base_id + "_" + name
+ new_id = new_id.lower().replace(" ", "_")
+ new_id = container_registry.uniqueName(new_id)
+
+ # Create a new quality_changes container for the quality.
+ quality_changes = InstanceContainer(new_id)
+ quality_changes.setName(name)
+ quality_changes.setMetaDataEntry("type", "quality_changes")
+ quality_changes.setMetaDataEntry("quality_type", quality_type)
+ if intent_category is not None:
+ quality_changes.setMetaDataEntry("intent_category", intent_category)
+
+ # If we are creating a container for an extruder, ensure we add that to the container.
+ if extruder_stack is not None:
+ quality_changes.setMetaDataEntry("position", extruder_stack.getMetaDataEntry("position"))
+
+ # If the machine specifies qualities should be filtered, ensure we match the current criteria.
+ machine_definition_id = ContainerTree.getInstance().machines[global_stack.definition.getId()].quality_definition
+ quality_changes.setDefinition(machine_definition_id)
+
+ quality_changes.setMetaDataEntry("setting_version", CuraApplication.getInstance().SettingVersion)
+ quality_changes.setDirty(True)
+ return quality_changes
+
@staticmethod
def _clearStack(stack):
application = CuraApplication.getInstance()
@@ -903,45 +932,30 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
extruder_stack.userChanges.setProperty(key, "value", value)
def _applyVariants(self, global_stack, extruder_stack_dict):
- application = CuraApplication.getInstance()
- variant_manager = application.getVariantManager()
+ machine_node = ContainerTree.getInstance().machines[global_stack.definition.getId()]
+ # Take the global variant from the machine info if available.
if self._machine_info.variant_info is not None:
- parser = self._machine_info.variant_info.parser
- variant_name = parser["general"]["name"]
-
- variant_type = VariantType.BUILD_PLATE
-
- node = variant_manager.getVariantNode(global_stack.definition.getId(), variant_name, variant_type)
- if node is not None and node.getContainer() is not None:
- global_stack.variant = node.getContainer()
+ variant_name = self._machine_info.variant_info.parser["general"]["name"]
+ if variant_name in machine_node.variants:
+ global_stack.variant = machine_node.variants[variant_name].container
+ else:
+ Logger.log("w", "Could not find global variant '{0}'.".format(variant_name))
for position, extruder_stack in extruder_stack_dict.items():
if position not in self._machine_info.extruder_info_dict:
continue
extruder_info = self._machine_info.extruder_info_dict[position]
if extruder_info.variant_info is None:
- # If there is no variant_info, try to use the default variant. Otherwise, leave it be.
- node = variant_manager.getDefaultVariantNode(global_stack.definition, VariantType.NOZZLE, global_stack)
- if node is not None and node.getContainer() is not None:
- extruder_stack.variant = node.getContainer()
- continue
- parser = extruder_info.variant_info.parser
-
- variant_name = parser["general"]["name"]
- variant_type = VariantType.NOZZLE
-
- node = variant_manager.getVariantNode(global_stack.definition.getId(), variant_name, variant_type)
- if node is not None and node.getContainer() is not None:
- extruder_stack.variant = node.getContainer()
+ # If there is no variant_info, try to use the default variant. Otherwise, any available variant.
+ node = machine_node.variants.get(machine_node.preferred_variant_name, next(iter(machine_node.variants.values())))
+ else:
+ variant_name = extruder_info.variant_info.parser["general"]["name"]
+ node = ContainerTree.getInstance().machines[global_stack.definition.getId()].variants[variant_name]
+ extruder_stack.variant = node.container
def _applyMaterials(self, global_stack, extruder_stack_dict):
- application = CuraApplication.getInstance()
- material_manager = application.getMaterialManager()
-
- # Force update lookup tables first
- material_manager.initialize()
-
+ machine_node = ContainerTree.getInstance().machines[global_stack.definition.getId()]
for position, extruder_stack in extruder_stack_dict.items():
if position not in self._machine_info.extruder_info_dict:
continue
@@ -952,18 +966,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
root_material_id = extruder_info.root_material_id
root_material_id = self._old_new_materials.get(root_material_id, root_material_id)
- build_plate_id = global_stack.variant.getId()
-
- # get material diameter of this extruder
- machine_material_diameter = extruder_stack.getCompatibleMaterialDiameter()
- material_node = material_manager.getMaterialNode(global_stack.definition.getId(),
- extruder_stack.variant.getName(),
- build_plate_id,
- machine_material_diameter,
- root_material_id)
-
- if material_node is not None and material_node.getContainer() is not None:
- extruder_stack.material = material_node.getContainer() # type: InstanceContainer
+ material_node = machine_node.variants[extruder_stack.variant.getName()].materials[root_material_id]
+ extruder_stack.material = material_node.container # type: InstanceContainer
def _applyChangesToMachine(self, global_stack, extruder_stack_dict):
# Clear all first
@@ -979,10 +983,12 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
# prepare the quality to select
self._quality_changes_to_apply = None
self._quality_type_to_apply = None
+ self._intent_category_to_apply = None
if self._machine_info.quality_changes_info is not None:
self._quality_changes_to_apply = self._machine_info.quality_changes_info.name
else:
self._quality_type_to_apply = self._machine_info.quality_type
+ self._intent_category_to_apply = self._machine_info.intent_category
# Set enabled/disabled for extruders
for position, extruder_stack in extruder_stack_dict.items():
@@ -1001,12 +1007,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
def _updateActiveMachine(self, global_stack):
# Actually change the active machine.
machine_manager = Application.getInstance().getMachineManager()
- material_manager = Application.getInstance().getMaterialManager()
- quality_manager = Application.getInstance().getQualityManager()
-
- # Force update the lookup maps first
- material_manager.initialize()
- quality_manager.initialize()
+ container_tree = ContainerTree.getInstance()
machine_manager.setActiveMachine(global_stack.getId())
@@ -1016,21 +1017,20 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
global_stack.setMetaDataEntry(key, value)
if self._quality_changes_to_apply:
- quality_changes_group_dict = quality_manager.getQualityChangesGroups(global_stack)
- if self._quality_changes_to_apply not in quality_changes_group_dict:
+ quality_changes_group_list = container_tree.getCurrentQualityChangesGroups()
+ quality_changes_group = next((qcg for qcg in quality_changes_group_list if qcg.name == self._quality_changes_to_apply), None)
+ if not quality_changes_group:
Logger.log("e", "Could not find quality_changes [%s]", self._quality_changes_to_apply)
return
- quality_changes_group = quality_changes_group_dict[self._quality_changes_to_apply]
machine_manager.setQualityChangesGroup(quality_changes_group, no_dialog = True)
else:
self._quality_type_to_apply = self._quality_type_to_apply.lower()
- quality_group_dict = quality_manager.getQualityGroups(global_stack)
+ quality_group_dict = container_tree.getCurrentQualityGroups()
if self._quality_type_to_apply in quality_group_dict:
quality_group = quality_group_dict[self._quality_type_to_apply]
else:
Logger.log("i", "Could not find quality type [%s], switch to default", self._quality_type_to_apply)
preferred_quality_type = global_stack.getMetaDataEntry("preferred_quality_type")
- quality_group_dict = quality_manager.getQualityGroups(global_stack)
quality_group = quality_group_dict.get(preferred_quality_type)
if quality_group is None:
Logger.log("e", "Could not get preferred quality type [%s]", preferred_quality_type)
@@ -1038,6 +1038,11 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
if quality_group is not None:
machine_manager.setQualityGroup(quality_group, no_dialog = True)
+ # Also apply intent if available
+ available_intent_category_list = IntentManager.getInstance().currentAvailableIntentCategories()
+ if self._intent_category_to_apply is not None and self._intent_category_to_apply in available_intent_category_list:
+ machine_manager.setIntentByCategory(self._intent_category_to_apply)
+
# Notify everything/one that is to notify about changes.
global_stack.containersChanged.emit(global_stack.getTop())
diff --git a/plugins/3MFReader/WorkspaceDialog.py b/plugins/3MFReader/WorkspaceDialog.py
index 332c57ceb1..3df7f1f570 100644
--- a/plugins/3MFReader/WorkspaceDialog.py
+++ b/plugins/3MFReader/WorkspaceDialog.py
@@ -43,6 +43,7 @@ class WorkspaceDialog(QObject):
self._quality_name = ""
self._num_settings_overridden_by_quality_changes = 0
self._quality_type = ""
+ self._intent_name = ""
self._machine_name = ""
self._machine_type = ""
self._variant_type = ""
@@ -60,6 +61,7 @@ class WorkspaceDialog(QObject):
hasVisibleSettingsFieldChanged = pyqtSignal()
numSettingsOverridenByQualityChangesChanged = pyqtSignal()
qualityTypeChanged = pyqtSignal()
+ intentNameChanged = pyqtSignal()
machineNameChanged = pyqtSignal()
materialLabelsChanged = pyqtSignal()
objectsOnPlateChanged = pyqtSignal()
@@ -166,6 +168,15 @@ class WorkspaceDialog(QObject):
self._quality_name = quality_name
self.qualityNameChanged.emit()
+ @pyqtProperty(str, notify = intentNameChanged)
+ def intentName(self) -> str:
+ return self._intent_name
+
+ def setIntentName(self, intent_name: str) -> None:
+ if self._intent_name != intent_name:
+ self._intent_name = intent_name
+ self.intentNameChanged.emit()
+
@pyqtProperty(str, notify=activeModeChanged)
def activeMode(self):
return self._active_mode
diff --git a/plugins/3MFReader/WorkspaceDialog.qml b/plugins/3MFReader/WorkspaceDialog.qml
index d8df4a64d1..d0fd3d0846 100644
--- a/plugins/3MFReader/WorkspaceDialog.qml
+++ b/plugins/3MFReader/WorkspaceDialog.qml
@@ -1,10 +1,10 @@
// Copyright (c) 2016 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
-import QtQuick 2.1
-import QtQuick.Controls 1.1
-import QtQuick.Layouts 1.1
-import QtQuick.Window 2.1
+import QtQuick 2.10
+import QtQuick.Controls 1.4
+import QtQuick.Layouts 1.3
+import QtQuick.Window 2.2
import UM 1.1 as UM
@@ -13,8 +13,8 @@ UM.Dialog
id: base
title: catalog.i18nc("@title:window", "Open Project")
- minimumWidth: 500 * screenScaleFactor
- minimumHeight: 450 * screenScaleFactor
+ minimumWidth: UM.Theme.getSize("popup_dialog").width
+ minimumHeight: UM.Theme.getSize("popup_dialog").height
width: minimumWidth
height: minimumHeight
@@ -24,7 +24,7 @@ UM.Dialog
onClosing: manager.notifyClosed()
onVisibleChanged:
{
- if(visible)
+ if (visible)
{
machineResolveComboBox.currentIndex = 0
qualityChangesResolveComboBox.currentIndex = 0
@@ -223,6 +223,21 @@ UM.Dialog
}
}
Row
+ {
+ width: parent.width
+ height: childrenRect.height
+ Label
+ {
+ text: catalog.i18nc("@action:label", "Intent")
+ width: (parent.width / 3) | 0
+ }
+ Label
+ {
+ text: manager.intentName
+ width: (parent.width / 3) | 0
+ }
+ }
+ Row
{
width: parent.width
height: manager.numUserSettings != 0 ? childrenRect.height : 0
diff --git a/plugins/3MFReader/__init__.py b/plugins/3MFReader/__init__.py
index ce94bbe69c..d68338c35f 100644
--- a/plugins/3MFReader/__init__.py
+++ b/plugins/3MFReader/__init__.py
@@ -12,7 +12,6 @@ except ImportError:
from . import ThreeMFWorkspaceReader
from UM.i18n import i18nCatalog
-from UM.Platform import Platform
catalog = i18nCatalog("cura")
diff --git a/plugins/3MFReader/plugin.json b/plugins/3MFReader/plugin.json
index 5af21a7033..e366a5da72 100644
--- a/plugins/3MFReader/plugin.json
+++ b/plugins/3MFReader/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides support for reading 3MF files.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/3MFWriter/plugin.json b/plugins/3MFWriter/plugin.json
index 3820ebd2e7..5c72072447 100644
--- a/plugins/3MFWriter/plugin.json
+++ b/plugins/3MFWriter/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides support for writing 3MF files.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/AMFReader/AMFReader.py b/plugins/AMFReader/AMFReader.py
index d35fbe3d40..6c5ee91e87 100644
--- a/plugins/AMFReader/AMFReader.py
+++ b/plugins/AMFReader/AMFReader.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2019 fieldOfView
+# Copyright (c) 2019 fieldOfView, Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
# This AMF parser is based on the AMF parser in legacy cura:
@@ -39,9 +39,9 @@ class AMFReader(MeshReader):
MimeTypeDatabase.addMimeType(
MimeType(
- name="application/x-amf",
- comment="AMF",
- suffixes=["amf"]
+ name = "application/x-amf",
+ comment = "AMF",
+ suffixes = ["amf"]
)
)
@@ -94,7 +94,7 @@ class AMFReader(MeshReader):
if t.tag == "x":
v[0] = float(t.text) * scale
elif t.tag == "y":
- v[2] = float(t.text) * scale
+ v[2] = -float(t.text) * scale
elif t.tag == "z":
v[1] = float(t.text) * scale
amf_mesh_vertices.append(v)
@@ -114,7 +114,7 @@ class AMFReader(MeshReader):
f[2] = int(t.text)
indices.append(f)
- mesh = trimesh.base.Trimesh(vertices=numpy.array(amf_mesh_vertices, dtype=numpy.float32), faces=numpy.array(indices, dtype=numpy.int32))
+ mesh = trimesh.base.Trimesh(vertices = numpy.array(amf_mesh_vertices, dtype = numpy.float32), faces = numpy.array(indices, dtype = numpy.int32))
mesh.merge_vertices()
mesh.remove_unreferenced_vertices()
mesh.fix_normals()
@@ -123,7 +123,7 @@ class AMFReader(MeshReader):
new_node = CuraSceneNode()
new_node.setSelectable(True)
new_node.setMeshData(mesh_data)
- new_node.setName(base_name if len(nodes)==0 else "%s %d" % (base_name, len(nodes)))
+ new_node.setName(base_name if len(nodes) == 0 else "%s %d" % (base_name, len(nodes)))
new_node.addDecorator(BuildPlateDecorator(CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate))
new_node.addDecorator(SliceableObjectDecorator())
@@ -165,9 +165,9 @@ class AMFReader(MeshReader):
indices.append(face)
face_count += 1
- vertices = numpy.asarray(vertices, dtype=numpy.float32)
- indices = numpy.asarray(indices, dtype=numpy.int32)
+ vertices = numpy.asarray(vertices, dtype = numpy.float32)
+ indices = numpy.asarray(indices, dtype = numpy.int32)
normals = calculateNormalsFromIndexedVertices(vertices, indices, face_count)
- mesh_data = MeshData(vertices=vertices, indices=indices, normals=normals)
+ mesh_data = MeshData(vertices = vertices, indices = indices, normals = normals)
return mesh_data
diff --git a/plugins/AMFReader/plugin.json b/plugins/AMFReader/plugin.json
index 599dc03c76..5e5b0f211b 100644
--- a/plugins/AMFReader/plugin.json
+++ b/plugins/AMFReader/plugin.json
@@ -3,5 +3,5 @@
"author": "fieldOfView",
"version": "1.0.0",
"description": "Provides support for reading AMF files.",
- "api": "6.0.0"
+ "api": "7.0.0"
}
diff --git a/plugins/CuraDrive/plugin.json b/plugins/CuraDrive/plugin.json
index d1cab39ca5..9b9b3e2c15 100644
--- a/plugins/CuraDrive/plugin.json
+++ b/plugins/CuraDrive/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"description": "Backup and restore your configuration.",
"version": "1.2.0",
- "api": 6,
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/CuraDrive/src/qml/main.qml b/plugins/CuraDrive/src/qml/main.qml
index 48bf3b6ea4..796a31e1d3 100644
--- a/plugins/CuraDrive/src/qml/main.qml
+++ b/plugins/CuraDrive/src/qml/main.qml
@@ -18,6 +18,7 @@ Window
minimumHeight: Math.round(UM.Theme.getSize("modal_window_minimum").height)
maximumWidth: Math.round(minimumWidth * 1.2)
maximumHeight: Math.round(minimumHeight * 1.2)
+ modality: Qt.ApplicationModal
width: minimumWidth
height: minimumHeight
color: UM.Theme.getColor("main_background")
diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py
index 9d2e4d1506..1437153f32 100755
--- a/plugins/CuraEngineBackend/CuraEngineBackend.py
+++ b/plugins/CuraEngineBackend/CuraEngineBackend.py
@@ -400,7 +400,7 @@ class CuraEngineBackend(QObject, Backend):
self.setState(BackendState.NotStarted)
if job.getResult() == StartJobResult.ObjectsWithDisabledExtruder:
- self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because there are objects associated with disabled Extruder %s." % job.getMessage()),
+ self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because there are objects associated with disabled Extruder %s.") % job.getMessage(),
title = catalog.i18nc("@info:title", "Unable to slice"))
self._error_message.show()
self.setState(BackendState.Error)
diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py
index b973a0775a..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]
@@ -106,6 +106,11 @@ class StartSliceJob(Job):
if stack is None:
return False
+ # if there are no per-object settings we don't need to check the other settings here
+ stack_top = stack.getTop()
+ if stack_top is None or not stack_top.getAllKeys():
+ return False
+
for key in stack.getAllKeys():
validation_state = stack.getProperty(key, "validationState")
if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError, ValidatorState.Invalid):
diff --git a/plugins/CuraEngineBackend/plugin.json b/plugins/CuraEngineBackend/plugin.json
index 28f0e294e7..5482e3699e 100644
--- a/plugins/CuraEngineBackend/plugin.json
+++ b/plugins/CuraEngineBackend/plugin.json
@@ -2,7 +2,7 @@
"name": "CuraEngine Backend",
"author": "Ultimaker B.V.",
"description": "Provides the link to the CuraEngine slicing backend.",
- "api": "6.0",
+ "api": "7.0",
"version": "1.0.1",
"i18n-catalog": "cura"
}
diff --git a/plugins/CuraProfileReader/CuraProfileReader.py b/plugins/CuraProfileReader/CuraProfileReader.py
index 5e2a4266c8..d4e5d393b2 100644
--- a/plugins/CuraProfileReader/CuraProfileReader.py
+++ b/plugins/CuraProfileReader/CuraProfileReader.py
@@ -8,7 +8,7 @@ from UM.Logger import Logger
from UM.Settings.ContainerFormatError import ContainerFormatError
from UM.Settings.InstanceContainer import InstanceContainer # The new profile to make.
from cura.CuraApplication import CuraApplication
-from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch
+from cura.Machines.ContainerTree import ContainerTree
from cura.ReaderWriters.ProfileReader import ProfileReader
import zipfile
@@ -97,7 +97,7 @@ class CuraProfileReader(ProfileReader):
if global_stack is None:
return None
- active_quality_definition = getMachineDefinitionIDForQualitySearch(global_stack.definition)
+ active_quality_definition = ContainerTree.getInstance().machines[global_stack.definition.getId()].quality_definition
if profile.getMetaDataEntry("definition") != active_quality_definition:
profile.setMetaDataEntry("definition", active_quality_definition)
return profile
diff --git a/plugins/CuraProfileReader/plugin.json b/plugins/CuraProfileReader/plugin.json
index 169fb43360..e1309b2d46 100644
--- a/plugins/CuraProfileReader/plugin.json
+++ b/plugins/CuraProfileReader/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides support for importing Cura profiles.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/CuraProfileWriter/plugin.json b/plugins/CuraProfileWriter/plugin.json
index 9627c754d7..180376f266 100644
--- a/plugins/CuraProfileWriter/plugin.json
+++ b/plugins/CuraProfileWriter/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides support for exporting Cura profiles.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog":"cura"
}
diff --git a/plugins/FirmwareUpdateChecker/plugin.json b/plugins/FirmwareUpdateChecker/plugin.json
index 6c55d77fd8..34e26fb146 100644
--- a/plugins/FirmwareUpdateChecker/plugin.json
+++ b/plugins/FirmwareUpdateChecker/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Checks for firmware updates.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/FirmwareUpdater/plugin.json b/plugins/FirmwareUpdater/plugin.json
index c1034e5e42..2546263064 100644
--- a/plugins/FirmwareUpdater/plugin.json
+++ b/plugins/FirmwareUpdater/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides a machine actions for updating firmware.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/GCodeGzReader/plugin.json b/plugins/GCodeGzReader/plugin.json
index d4f281682f..b3d52b1627 100644
--- a/plugins/GCodeGzReader/plugin.json
+++ b/plugins/GCodeGzReader/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Reads g-code from a compressed archive.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/GCodeGzWriter/plugin.json b/plugins/GCodeGzWriter/plugin.json
index b0e6f8d605..de59d1eda8 100644
--- a/plugins/GCodeGzWriter/plugin.json
+++ b/plugins/GCodeGzWriter/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Writes g-code to a compressed archive.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/GCodeProfileReader/plugin.json b/plugins/GCodeProfileReader/plugin.json
index af1c2d1827..162c31ce35 100644
--- a/plugins/GCodeProfileReader/plugin.json
+++ b/plugins/GCodeProfileReader/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides support for importing profiles from g-code files.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/GCodeReader/plugin.json b/plugins/GCodeReader/plugin.json
index bbc94fa917..e34fefbdff 100644
--- a/plugins/GCodeReader/plugin.json
+++ b/plugins/GCodeReader/plugin.json
@@ -3,6 +3,6 @@
"author": "Victor Larchenko, Ultimaker",
"version": "1.0.1",
"description": "Allows loading and displaying G-code files.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py
index 3e5bf59e73..792b2aff10 100644
--- a/plugins/GCodeWriter/GCodeWriter.py
+++ b/plugins/GCodeWriter/GCodeWriter.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import re # For escaping characters in the settings.
@@ -9,8 +9,7 @@ from UM.Mesh.MeshWriter import MeshWriter
from UM.Logger import Logger
from UM.Application import Application
from UM.Settings.InstanceContainer import InstanceContainer
-
-from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch
+from cura.Machines.ContainerTree import ContainerTree
from UM.i18n import i18nCatalog
catalog = i18nCatalog("cura")
@@ -117,17 +116,24 @@ class GCodeWriter(MeshWriter):
# \return A serialised string of the settings.
def _serialiseSettings(self, stack):
container_registry = self._application.getContainerRegistry()
- quality_manager = self._application.getQualityManager()
prefix = self._setting_keyword + str(GCodeWriter.version) + " " # The prefix to put before each line.
prefix_length = len(prefix)
quality_type = stack.quality.getMetaDataEntry("quality_type")
container_with_profile = stack.qualityChanges
+ machine_definition_id_for_quality = ContainerTree.getInstance().machines[stack.definition.getId()].quality_definition
if container_with_profile.getId() == "empty_quality_changes":
# If the global quality changes is empty, create a new one
quality_name = container_registry.uniqueName(stack.quality.getName())
- container_with_profile = quality_manager._createQualityChanges(quality_type, quality_name, stack, None)
+ quality_id = container_registry.uniqueName((stack.definition.getId() + "_" + quality_name).lower().replace(" ", "_"))
+ container_with_profile = InstanceContainer(quality_id)
+ container_with_profile.setName(quality_name)
+ container_with_profile.setMetaDataEntry("type", "quality_changes")
+ container_with_profile.setMetaDataEntry("quality_type", quality_type)
+ if stack.getMetaDataEntry("position") is not None: # For extruder stacks, the quality changes should include an intent category.
+ container_with_profile.setMetaDataEntry("intent_category", stack.intent.getMetaDataEntry("intent_category", "default"))
+ container_with_profile.setDefinition(machine_definition_id_for_quality)
flat_global_container = self._createFlattenedContainerInstance(stack.userChanges, container_with_profile)
# If the quality changes is not set, we need to set type manually
@@ -139,7 +145,6 @@ class GCodeWriter(MeshWriter):
flat_global_container.setMetaDataEntry("quality_type", stack.quality.getMetaDataEntry("quality_type", "normal"))
# Get the machine definition ID for quality profiles
- machine_definition_id_for_quality = getMachineDefinitionIDForQualitySearch(stack.definition)
flat_global_container.setMetaDataEntry("definition", machine_definition_id_for_quality)
serialized = flat_global_container.serialize()
@@ -151,7 +156,12 @@ class GCodeWriter(MeshWriter):
if extruder_quality.getId() == "empty_quality_changes":
# Same story, if quality changes is empty, create a new one
quality_name = container_registry.uniqueName(stack.quality.getName())
- extruder_quality = quality_manager._createQualityChanges(quality_type, quality_name, stack, None)
+ quality_id = container_registry.uniqueName((stack.definition.getId() + "_" + quality_name).lower().replace(" ", "_"))
+ extruder_quality = InstanceContainer(quality_id)
+ extruder_quality.setName(quality_name)
+ extruder_quality.setMetaDataEntry("type", "quality_changes")
+ extruder_quality.setMetaDataEntry("quality_type", quality_type)
+ extruder_quality.setDefinition(machine_definition_id_for_quality)
flat_extruder_quality = self._createFlattenedContainerInstance(extruder.userChanges, extruder_quality)
# If the quality changes is not set, we need to set type manually
diff --git a/plugins/GCodeWriter/plugin.json b/plugins/GCodeWriter/plugin.json
index f3a95ddb78..457652bf3f 100644
--- a/plugins/GCodeWriter/plugin.json
+++ b/plugins/GCodeWriter/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Writes g-code to a file.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
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/ImageReader/plugin.json b/plugins/ImageReader/plugin.json
index d966537d99..a5f03a540d 100644
--- a/plugins/ImageReader/plugin.json
+++ b/plugins/ImageReader/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Enables ability to generate printable geometry from 2D image files.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py
index 013bab6f11..87b26eb4ec 100644
--- a/plugins/LegacyProfileReader/LegacyProfileReader.py
+++ b/plugins/LegacyProfileReader/LegacyProfileReader.py
@@ -157,7 +157,7 @@ class LegacyProfileReader(ProfileReader):
data = stream.getvalue()
profile = InstanceContainer(profile_id)
- profile.deserialize(data) # Also performs the version upgrade.
+ profile.deserialize(data, file_name) # Also performs the version upgrade.
profile.setDirty(True)
#We need to return one extruder stack and one global stack.
diff --git a/plugins/LegacyProfileReader/plugin.json b/plugins/LegacyProfileReader/plugin.json
index 2f5264ad37..f4f18becbf 100644
--- a/plugins/LegacyProfileReader/plugin.json
+++ b/plugins/LegacyProfileReader/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides support for importing profiles from legacy Cura versions.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py b/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py
index 05f49017a3..cd0f681828 100644
--- a/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py
+++ b/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py
@@ -5,7 +5,6 @@ import configparser # An input for some functions we're testing.
import os.path # To find the integration test .ini files.
import pytest # To register tests with.
import unittest.mock # To mock the application, plug-in and container registry out.
-import os.path
import sys
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), ".."))
@@ -16,6 +15,7 @@ import UM.Settings.InstanceContainer # To intercept the serialised data from the
import LegacyProfileReader as LegacyProfileReaderModule # To get the directory of the module.
+
@pytest.fixture
def legacy_profile_reader():
try:
@@ -162,7 +162,7 @@ def test_read(legacy_profile_reader, file_name):
plugin_registry.getPluginPath = unittest.mock.MagicMock(return_value = os.path.dirname(LegacyProfileReaderModule.__file__))
# Mock out the resulting InstanceContainer so that we can intercept the data before it's passed through the version upgrader.
- def deserialize(self, data): # Intercepts the serialised data that we'd perform the version upgrade from when deserializing.
+ def deserialize(self, data, filename): # Intercepts the serialised data that we'd perform the version upgrade from when deserializing.
global intercepted_data
intercepted_data = data
@@ -192,4 +192,4 @@ def test_read(legacy_profile_reader, file_name):
assert parser["metadata"]["type"] == "quality_changes"
assert parser["metadata"]["quality_type"] == "normal"
assert parser["metadata"]["position"] == "0"
- assert parser["metadata"]["setting_version"] == "5" # Yes, before we upgraded.
\ No newline at end of file
+ assert parser["metadata"]["setting_version"] == "5" # Yes, before we upgraded.
diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py
index d48475b1e6..28535024a7 100755
--- a/plugins/MachineSettingsAction/MachineSettingsAction.py
+++ b/plugins/MachineSettingsAction/MachineSettingsAction.py
@@ -11,7 +11,9 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.DefinitionContainer import DefinitionContainer
from UM.Util import parseBool
+import cura.CuraApplication # Imported like this to prevent circular dependencies.
from cura.MachineAction import MachineAction
+from cura.Machines.ContainerTree import ContainerTree # To re-build the machine node when hasMaterials changes.
from cura.Settings.CuraStackBuilder import CuraStackBuilder
from cura.Settings.cura_empty_instance_containers import isEmptyContainer
@@ -41,6 +43,9 @@ class MachineSettingsAction(MachineAction):
self._backend = self._application.getBackend()
self.onFinished.connect(self._onFinished)
+ # If the g-code flavour changes between UltiGCode and another flavour, we need to update the container tree.
+ self._application.globalContainerStackChanged.connect(self._updateHasMaterialsInContainerTree)
+
# Which container index in a stack to store machine setting changes.
@pyqtProperty(int, constant = True)
def storeContainerIndex(self) -> int:
@@ -51,6 +56,18 @@ class MachineSettingsAction(MachineAction):
if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine":
self._application.getMachineActionManager().addSupportedAction(container.getId(), self.getKey())
+ ## Triggered when the global container stack changes or when the g-code
+ # flavour setting is changed.
+ def _updateHasMaterialsInContainerTree(self) -> None:
+ global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+ if global_stack is None:
+ return
+ machine_node = ContainerTree.getInstance().machines[global_stack.definition.getId()]
+
+ if machine_node.has_materials != parseBool(global_stack.getMetaDataEntry("has_materials")): # May have changed due to the g-code flavour.
+ machine_node.has_materials = parseBool(global_stack.getMetaDataEntry("has_materials"))
+ machine_node._loadAll()
+
def _reset(self):
global_stack = self._application.getMachineManager().activeMachine
if not global_stack:
@@ -98,11 +115,8 @@ class MachineSettingsAction(MachineAction):
return
machine_manager = self._application.getMachineManager()
- material_manager = self._application.getMaterialManager()
- extruder_positions = list(global_stack.extruders.keys())
has_materials = global_stack.getProperty("machine_gcode_flavor", "value") != "UltiGCode"
- material_node = None
if has_materials:
global_stack.setMetaDataEntry("has_materials", True)
else:
@@ -111,11 +125,15 @@ class MachineSettingsAction(MachineAction):
if "has_materials" in global_stack.getMetaData():
global_stack.removeMetaDataEntry("has_materials")
+ self._updateHasMaterialsInContainerTree()
+
# set materials
- for position in extruder_positions:
- if has_materials:
- material_node = material_manager.getDefaultMaterial(global_stack, position, None)
- machine_manager.setMaterial(position, material_node)
+ machine_node = ContainerTree.getInstance().machines[global_stack.definition.getId()]
+ for position, extruder in enumerate(global_stack.extruderList):
+ #Find out what material we need to default to.
+ approximate_diameter = round(extruder.getProperty("material_diameter", "value"))
+ material_node = machine_node.variants[extruder.variant.getName()].preferredMaterial(approximate_diameter)
+ machine_manager.setMaterial(str(position), material_node)
self._application.globalContainerStackChanged.emit()
diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml
index a1540c22ab..56b4d3e3b6 100644
--- a/plugins/MachineSettingsAction/MachineSettingsAction.qml
+++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml
@@ -87,9 +87,25 @@ Cura.MachineAction
}
}
}
+
+ Label
+ {
+ id: machineNameLabel
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.leftMargin: UM.Theme.getSize("default_margin").width
+ text: Cura.MachineManager.activeMachine.name
+ horizontalAlignment: Text.AlignHCenter
+ font: UM.Theme.getFont("large_bold")
+ color: UM.Theme.getColor("text")
+ renderType: Text.NativeRendering
+ }
+
UM.TabRow
{
id: tabBar
+ anchors.top: machineNameLabel.bottom
+ anchors.topMargin: UM.Theme.getSize("default_margin").height
width: parent.width
Repeater
{
diff --git a/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml b/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml
index 5ba331de2b..2ceabf87d0 100644
--- a/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml
+++ b/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml
@@ -68,7 +68,7 @@ Item
Cura.NumericTextFieldWithUnit // "Nozzle size"
{
id: extruderNozzleSizeField
- visible: !Cura.MachineManager.hasVariants
+ visible: !Cura.MachineManager.activeMachine.hasVariants
containerStackId: base.extruderStackId
settingKey: "machine_nozzle_size"
settingStoreIndex: propertyStoreIndex
diff --git a/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml b/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml
index b8c6b78004..3780d6447b 100644
--- a/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml
+++ b/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml
@@ -25,7 +25,7 @@ Item
property int controlWidth: (columnWidth / 3) | 0
property var labelFont: UM.Theme.getFont("default")
- property string machineStackId: Cura.MachineManager.activeMachineId
+ property string machineStackId: Cura.MachineManager.activeMachine.id
property var forceUpdateFunction: manager.forceUpdate
@@ -331,6 +331,18 @@ Item
onGlobalContainerChanged: extruderCountModel.update()
}
}
+
+ Cura.SimpleCheckBox // "Shared Heater"
+ {
+ id: sharedHeaterCheckBox
+ containerStackId: machineStackId
+ settingKey: "machine_extruders_share_heater"
+ settingStoreIndex: propertyStoreIndex
+ labelText: catalog.i18nc("@label", "Shared Heater")
+ labelFont: base.labelFont
+ labelWidth: base.labelWidth
+ forceUpdateOnChangeFunction: forceUpdateFunction
+ }
}
}
diff --git a/plugins/MachineSettingsAction/plugin.json b/plugins/MachineSettingsAction/plugin.json
index d734c1adf5..cc1e5fb01e 100644
--- a/plugins/MachineSettingsAction/plugin.json
+++ b/plugins/MachineSettingsAction/plugin.json
@@ -3,6 +3,6 @@
"author": "fieldOfView",
"version": "1.0.1",
"description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/ModelChecker/plugin.json b/plugins/ModelChecker/plugin.json
index 59be5bbf0a..6437fb0802 100644
--- a/plugins/ModelChecker/plugin.json
+++ b/plugins/ModelChecker/plugin.json
@@ -2,7 +2,7 @@
"name": "Model Checker",
"author": "Ultimaker B.V.",
"version": "1.0.1",
- "api": "6.0",
+ "api": "7.0",
"description": "Checks models and print configuration for possible printing issues and give suggestions.",
"i18n-catalog": "cura"
}
diff --git a/plugins/MonitorStage/MonitorMain.qml b/plugins/MonitorStage/MonitorMain.qml
index 7c0a20ef66..a70c10ff0f 100644
--- a/plugins/MonitorStage/MonitorMain.qml
+++ b/plugins/MonitorStage/MonitorMain.qml
@@ -25,7 +25,7 @@ Rectangle
{
// Readability:
var connectedTypes = [2, 3];
- var types = Cura.MachineManager.activeMachineConfiguredConnectionTypes
+ var types = Cura.MachineManager.activeMachine.configuredConnectionTypes
// Check if configured connection types includes either 2 or 3 (LAN or cloud)
for (var i = 0; i < types.length; i++)
diff --git a/plugins/MonitorStage/plugin.json b/plugins/MonitorStage/plugin.json
index 95e4b86f36..2274351527 100644
--- a/plugins/MonitorStage/plugin.json
+++ b/plugins/MonitorStage/plugin.json
@@ -1,8 +1,8 @@
-{
- "name": "Monitor Stage",
- "author": "Ultimaker B.V.",
- "version": "1.0.1",
- "description": "Provides a monitor stage in Cura.",
- "api": "6.0",
- "i18n-catalog": "cura"
+{
+ "name": "Monitor Stage",
+ "author": "Ultimaker B.V.",
+ "version": "1.0.1",
+ "description": "Provides a monitor stage in Cura.",
+ "api": "7.0",
+ "i18n-catalog": "cura"
}
\ No newline at end of file
diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py
index 3e1df1c7b8..61d0dbc0f0 100644
--- a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py
+++ b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py
@@ -1,7 +1,7 @@
# Copyright (c) 2016 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal
+from PyQt5.QtCore import pyqtProperty
from UM.FlameProfiler import pyqtSlot
from UM.Application import Application
@@ -13,6 +13,7 @@ import UM.Settings.Models.SettingVisibilityHandler
from cura.Settings.ExtruderManager import ExtruderManager #To get global-inherits-stack setting values from different extruders.
from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator
+
## The per object setting visibility handler ensures that only setting
# definitions that have a matching instance Container are returned as visible.
class PerObjectSettingVisibilityHandler(UM.Settings.Models.SettingVisibilityHandler.SettingVisibilityHandler):
diff --git a/plugins/PerObjectSettingsTool/plugin.json b/plugins/PerObjectSettingsTool/plugin.json
index f272abf06a..b30acfd52e 100644
--- a/plugins/PerObjectSettingsTool/plugin.json
+++ b/plugins/PerObjectSettingsTool/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides the Per Model Settings.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/PostProcessingPlugin/plugin.json b/plugins/PostProcessingPlugin/plugin.json
index 1e73133c53..6a2b84933e 100644
--- a/plugins/PostProcessingPlugin/plugin.json
+++ b/plugins/PostProcessingPlugin/plugin.json
@@ -2,7 +2,7 @@
"name": "Post Processing",
"author": "Ultimaker",
"version": "2.2.1",
- "api": "6.0",
+ "api": "7.0",
"description": "Extension that allows for user created scripts for post processing",
"catalog": "cura"
}
\ No newline at end of file
diff --git a/plugins/PostProcessingPlugin/scripts/DisplayRemainingTimeOnLCD.py b/plugins/PostProcessingPlugin/scripts/DisplayRemainingTimeOnLCD.py
new file mode 100644
index 0000000000..7d9af10925
--- /dev/null
+++ b/plugins/PostProcessingPlugin/scripts/DisplayRemainingTimeOnLCD.py
@@ -0,0 +1,94 @@
+# Cura PostProcessingPlugin
+# Author: Mathias Lyngklip Kjeldgaard
+# Date: July 31, 2019
+# Modified: November 26, 2019
+
+# 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":"Display 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. This is updated every layer.",
+ "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/PostProcessingPlugin/scripts/PauseAtHeight.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py
index 3a25b7781a..17b4de88dd 100644
--- a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py
+++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py
@@ -162,6 +162,8 @@ class PauseAtHeight(Script):
# use offset to calculate the current height: = -
layer_0_z = 0
current_z = 0
+ current_height = 0
+ current_layer = 0
current_extrusion_f = 0
got_first_g_cmd_on_layer_0 = False
current_t = 0 #Tracks the current extruder for tracking the target temperature.
@@ -217,7 +219,7 @@ class PauseAtHeight(Script):
current_height = current_z - layer_0_z
if current_height < pause_height:
- break # Try the next layer.
+ continue # Scan the enitre layer, z-changes are not always on the same/first line.
# Pause at layer
else:
@@ -263,8 +265,8 @@ class PauseAtHeight(Script):
# the nozzle)
x, y = self.getNextXY(layer)
prev_lines = prev_layer.split("\n")
- for line in prev_lines:
- new_e = self.getValue(line, 'E', current_e)
+ for lin in prev_lines:
+ new_e = self.getValue(lin, "E", current_e)
if new_e != current_e:
current_e = new_e
break
diff --git a/plugins/PrepareStage/plugin.json b/plugins/PrepareStage/plugin.json
index dc5c68ce16..e65c62ef49 100644
--- a/plugins/PrepareStage/plugin.json
+++ b/plugins/PrepareStage/plugin.json
@@ -1,8 +1,8 @@
-{
- "name": "Prepare Stage",
- "author": "Ultimaker B.V.",
- "version": "1.0.1",
- "description": "Provides a prepare stage in Cura.",
- "api": "6.0",
- "i18n-catalog": "cura"
+{
+ "name": "Prepare Stage",
+ "author": "Ultimaker B.V.",
+ "version": "1.0.1",
+ "description": "Provides a prepare stage in Cura.",
+ "api": "7.0",
+ "i18n-catalog": "cura"
}
\ No newline at end of file
diff --git a/plugins/PreviewStage/PreviewMain.qml b/plugins/PreviewStage/PreviewMain.qml
index 6b5ce2436b..2926f0d012 100644
--- a/plugins/PreviewStage/PreviewMain.qml
+++ b/plugins/PreviewStage/PreviewMain.qml
@@ -11,12 +11,34 @@ 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: childSafeArea
+ x: safeArea.x - parent.x
+ y: safeArea.y - parent.y
+ width: actionPanelWidget.x - x
+ height: actionPanelWidget.y - y
+ }
+
Loader
{
id: previewMain
anchors.fill: parent
source: UM.Controller.activeView != null && UM.Controller.activeView.mainComponent != null ? UM.Controller.activeView.mainComponent : ""
+
+ onLoaded:
+ {
+ if (previewMain.item.safeArea !== undefined){
+ previewMain.item.safeArea = Qt.binding(function() { return childSafeArea });
+ }
+ }
}
Cura.ActionPanelWidget
diff --git a/plugins/PreviewStage/plugin.json b/plugins/PreviewStage/plugin.json
index e1e4288bae..1c21e682ee 100644
--- a/plugins/PreviewStage/plugin.json
+++ b/plugins/PreviewStage/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides a preview stage in Cura.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
\ No newline at end of file
diff --git a/plugins/RemovableDriveOutputDevice/WindowsRemovableDrivePlugin.py b/plugins/RemovableDriveOutputDevice/WindowsRemovableDrivePlugin.py
index 51b6a70b7a..c89bd31e21 100644
--- a/plugins/RemovableDriveOutputDevice/WindowsRemovableDrivePlugin.py
+++ b/plugins/RemovableDriveOutputDevice/WindowsRemovableDrivePlugin.py
@@ -48,9 +48,13 @@ class WindowsRemovableDrivePlugin(RemovableDrivePlugin.RemovableDrivePlugin):
drives = {}
bitmask = ctypes.windll.kernel32.GetLogicalDrives()
- # Check possible drive letters, from A to Z
+ # Check possible drive letters, from C to Z
# Note: using ascii_uppercase because we do not want this to change with locale!
- for letter in string.ascii_uppercase:
+ # Skip A and B, since those drives are typically reserved for floppy disks.
+ # Those drives can theoretically be reassigned but it's safer to not check them for removable drives.
+ # Windows will also behave weirdly even with some of its internal functions if you do this (e.g. search indexing doesn't search it).
+ # Users that have removable drives in A or B will just have to save to file and select the drive there.
+ for letter in string.ascii_uppercase[2:]:
drive = "{0}:/".format(letter)
# Do we really want to skip A and B?
diff --git a/plugins/RemovableDriveOutputDevice/plugin.json b/plugins/RemovableDriveOutputDevice/plugin.json
index 5523d6b1c1..c794257e3a 100644
--- a/plugins/RemovableDriveOutputDevice/plugin.json
+++ b/plugins/RemovableDriveOutputDevice/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"description": "Provides removable drive hotplugging and writing support.",
"version": "1.0.1",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/SimulationView/LayerSlider.qml b/plugins/SimulationView/LayerSlider.qml
index 88f298d1f5..d6de45df9b 100644
--- a/plugins/SimulationView/LayerSlider.qml
+++ b/plugins/SimulationView/LayerSlider.qml
@@ -155,25 +155,19 @@ Item
}
onPositionChanged: parent.onHandleDragged()
- onPressed: sliderRoot.setActiveHandle(rangeHandle)
+ onPressed:
+ {
+ sliderRoot.setActiveHandle(rangeHandle)
+ sliderRoot.forceActiveFocus()
+ }
}
- SimulationSliderLabel
- {
- id: rangleHandleLabel
+ }
- height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height
- x: parent.x - width - UM.Theme.getSize("default_margin").width
- anchors.verticalCenter: parent.verticalCenter
- target: Qt.point(sliderRoot.width, y + height / 2)
- visible: sliderRoot.activeHandle == parent
-
- // custom properties
- maximumValue: sliderRoot.maximumValue
- value: sliderRoot.upperValue
- busy: UM.SimulationView.busy
- setValue: rangeHandle.setValueManually // connect callback functions
- }
+ onHeightChanged : {
+ // After a height change, the pixel-position of the handles is out of sync with the property value
+ setLowerValue(lowerValue)
+ setUpperValue(upperValue)
}
// Upper handle
@@ -270,11 +264,12 @@ Item
{
id: upperHandleLabel
- height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height
- x: parent.x - parent.width - width
- anchors.verticalCenter: parent.verticalCenter
- target: Qt.point(sliderRoot.width, y + height / 2)
- visible: sliderRoot.activeHandle == parent
+ height: sliderRoot.handleSize
+ anchors.bottom: parent.top
+ anchors.bottomMargin: UM.Theme.getSize("narrow_margin").height
+ anchors.horizontalCenter: parent.horizontalCenter
+ target: Qt.point(parent.width / 2, parent.top)
+ visible: sliderRoot.activeHandle == parent || sliderRoot.activeHandle == rangeHandle
// custom properties
maximumValue: sliderRoot.maximumValue
@@ -333,7 +328,6 @@ Item
// set the slider position based on the lower value
function setValue(value)
{
-
// Normalize values between range, since using arrow keys will create out-of-the-range values
value = sliderRoot.normalizeValue(value)
@@ -380,11 +374,12 @@ Item
{
id: lowerHandleLabel
- height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height
- x: parent.x - parent.width - width
- anchors.verticalCenter: parent.verticalCenter
- target: Qt.point(sliderRoot.width + width, y + height / 2)
- visible: sliderRoot.activeHandle == parent
+ height: sliderRoot.handleSize
+ anchors.top: parent.bottom
+ anchors.topMargin: UM.Theme.getSize("narrow_margin").height
+ anchors.horizontalCenter: parent.horizontalCenter
+ target: Qt.point(parent.width / 2, parent.bottom)
+ visible: sliderRoot.activeHandle == parent || sliderRoot.activeHandle == rangeHandle
// custom properties
maximumValue: sliderRoot.maximumValue
@@ -393,4 +388,4 @@ Item
setValue: lowerHandle.setValueManually // connect callback functions
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/SimulationView/NozzleNode.py b/plugins/SimulationView/NozzleNode.py
index 8a29871775..11b788c128 100644
--- a/plugins/SimulationView/NozzleNode.py
+++ b/plugins/SimulationView/NozzleNode.py
@@ -3,7 +3,6 @@
from UM.Application import Application
from UM.Math.Color import Color
-from UM.Math.Vector import Vector
from UM.PluginRegistry import PluginRegistry
from UM.Scene.SceneNode import SceneNode
from UM.View.GL.OpenGL import OpenGL
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/SimulationSliderLabel.qml b/plugins/SimulationView/SimulationSliderLabel.qml
index 06c6a51b44..c1fb0f4de9 100644
--- a/plugins/SimulationView/SimulationSliderLabel.qml
+++ b/plugins/SimulationView/SimulationSliderLabel.qml
@@ -1,7 +1,6 @@
// Copyright (c) 2017 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
-
-import QtQuick 2.2
+import QtQuick 2.5
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.1
@@ -20,9 +19,9 @@ UM.PointingRectangle {
property int startFrom: 1
target: Qt.point(parent.width, y + height / 2)
- arrowSize: UM.Theme.getSize("default_arrow").width
+ arrowSize: UM.Theme.getSize("button_tooltip_arrow").height
height: parent.height
- width: valueLabel.width + UM.Theme.getSize("default_margin").width
+ width: valueLabel.width
visible: false
color: UM.Theme.getColor("tool_panel_background")
@@ -40,26 +39,35 @@ UM.PointingRectangle {
anchors.fill: parent
}
+ TextMetrics {
+ id: maxValueMetrics
+ font: valueLabel.font
+ text: maximumValue + 1 // layers are 0 based, add 1 for display value
+
+ }
+
TextField {
id: valueLabel
anchors {
verticalCenter: parent.verticalCenter
horizontalCenter: parent.horizontalCenter
+ alignWhenCentered: false
}
- width: ((maximumValue + 1).toString().length + 1) * 10 * screenScaleFactor
+ width: maxValueMetrics.width + UM.Theme.getSize("default_margin").width
text: sliderLabelRoot.value + startFrom // the current handle value, add 1 because layers is an array
- horizontalAlignment: TextInput.AlignRight
+ horizontalAlignment: TextInput.AlignHCenter
// key bindings, work when label is currenctly focused (active handle in LayerSlider)
Keys.onUpPressed: sliderLabelRoot.setValue(sliderLabelRoot.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
Keys.onDownPressed: sliderLabelRoot.setValue(sliderLabelRoot.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
style: TextFieldStyle {
- textColor: UM.Theme.getColor("setting_control_text")
+ textColor: UM.Theme.getColor("text")
font: UM.Theme.getFont("default")
- background: Item { }
+ renderType: Text.NativeRendering
+ background: Item { }
}
onEditingFinished: {
diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py
index 28d5a74523..6d6f19c57c 100644
--- a/plugins/SimulationView/SimulationView.py
+++ b/plugins/SimulationView/SimulationView.py
@@ -48,7 +48,7 @@ if TYPE_CHECKING:
catalog = i18nCatalog("cura")
-## View used to display g-code paths.
+## The preview layer view. It is used to display g-code paths.
class SimulationView(CuraView):
# Must match SimulationViewMenuComponent.qml
LAYER_VIEW_TYPE_MATERIAL_TYPE = 0
@@ -213,6 +213,8 @@ class SimulationView(CuraView):
def beginRendering(self) -> None:
scene = self.getController().getScene()
renderer = self.getRenderer()
+ if renderer is None:
+ return
if not self._ghost_shader:
self._ghost_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "color.shader"))
@@ -490,7 +492,11 @@ class SimulationView(CuraView):
# Make sure the SimulationPass is created
layer_pass = self.getSimulationPass()
- self.getRenderer().addRenderPass(layer_pass)
+ renderer = self.getRenderer()
+ if renderer is None:
+ return False
+
+ renderer.addRenderPass(layer_pass)
# Make sure the NozzleNode is add to the root
nozzle = self.getNozzleNode()
@@ -509,7 +515,7 @@ class SimulationView(CuraView):
self._simulationview_composite_shader.setUniformValue("u_outline_color", Color(*theme.getColor("model_selection_outline").getRgb()))
if not self._composite_pass:
- self._composite_pass = cast(CompositePass, self.getRenderer().getRenderPass("composite"))
+ self._composite_pass = cast(CompositePass, renderer.getRenderPass("composite"))
self._old_layer_bindings = self._composite_pass.getLayerBindings()[:] # make a copy so we can restore to it later
self._composite_pass.getLayerBindings().append("simulationview")
@@ -525,7 +531,13 @@ class SimulationView(CuraView):
self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged)
if self._nozzle_node:
self._nozzle_node.setParent(None)
- self.getRenderer().removeRenderPass(self._layer_pass)
+
+ renderer = self.getRenderer()
+ if renderer is None:
+ return False
+
+ if self._layer_pass is not None:
+ renderer.removeRenderPass(self._layer_pass)
if self._composite_pass:
self._composite_pass.setLayerBindings(cast(List[str], self._old_layer_bindings))
self._composite_pass.setCompositeShader(cast(ShaderProgram, self._old_composite_shader))
diff --git a/plugins/SimulationView/SimulationViewMainComponent.qml b/plugins/SimulationView/SimulationViewMainComponent.qml
index 58901652d3..bfd8799673 100644
--- a/plugins/SimulationView/SimulationViewMainComponent.qml
+++ b/plugins/SimulationView/SimulationViewMainComponent.qml
@@ -11,19 +11,39 @@ import Cura 1.0 as Cura
Item
{
- property bool is_simulation_playing: false
+ // An Item whose bounds are guaranteed to be safe for overlays to be placed.
+ // Defaults to parent, ie. the entire available area
+ // eg. the layer slider will not be placed in this area.
+ property var safeArea: parent
+
+
+ property bool isSimulationPlaying: false
+ 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
+ // A slider which lets users trace a single layer (XY movements)
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
@@ -58,7 +78,7 @@ Item
UM.SimpleButton
{
id: playButton
- iconSource: !is_simulation_playing ? "./resources/simulation_resume.svg": "./resources/simulation_pause.svg"
+ iconSource: !isSimulationPlaying ? "./resources/simulation_resume.svg": "./resources/simulation_pause.svg"
width: UM.Theme.getSize("small_button").width
height: UM.Theme.getSize("small_button").height
hoverColor: UM.Theme.getColor("slider_handle_active")
@@ -88,7 +108,7 @@ Item
onClicked:
{
- if(is_simulation_playing)
+ if(isSimulationPlaying)
{
pauseSimulation()
}
@@ -102,7 +122,7 @@ Item
{
UM.SimulationView.setSimulationRunning(false)
simulationTimer.stop()
- is_simulation_playing = false
+ isSimulationPlaying = false
layerSlider.manuallyChanged = true
pathSlider.manuallyChanged = true
}
@@ -131,7 +151,7 @@ Item
// When the user plays the simulation, if the path slider is at the end of this layer, we start
// the simulation at the beginning of the current layer.
- if (!is_simulation_playing)
+ if (!isSimulationPlaying)
{
if (currentPath >= numPaths)
{
@@ -166,22 +186,30 @@ Item
}
// The status must be set here instead of in the resumeSimulation function otherwise it won't work
// correctly, because part of the logic is in this trigger function.
- is_simulation_playing = true
+ isSimulationPlaying = true
}
}
+ // Scrolls trough Z layers
LayerSlider
{
+ property var preferredHeight: UM.Theme.getSize("slider_layerview_size").height
+ property double heightMargin: UM.Theme.getSize("default_margin").height * 3 // extra margin to accomodate layer number tooltips
+ property double layerSliderSafeHeight: layerSliderSafeYMax - layerSliderSafeYMin
+
id: layerSlider
width: UM.Theme.getSize("slider_handle").width
- height: UM.Theme.getSize("slider_layerview_size").height
+ height: preferredHeight + heightMargin * 2 < layerSliderSafeHeight ? preferredHeight : layerSliderSafeHeight - heightMargin * 2
anchors
{
right: parent.right
verticalCenter: parent.verticalCenter
+ verticalCenterOffset: -(parent.height - layerSliderSafeYMax - layerSliderSafeYMin) / 2 // center between parent top and layerSliderSafeYMax
rightMargin: UM.Theme.getSize("default_margin").width
+ bottomMargin: heightMargin
+ topMargin: heightMargin
}
// Custom properties
diff --git a/plugins/SimulationView/plugin.json b/plugins/SimulationView/plugin.json
index 3ccf91b9e6..e444f1fa2e 100644
--- a/plugins/SimulationView/plugin.json
+++ b/plugins/SimulationView/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides the Simulation view.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py
index 9308719227..af8a8b9853 100755
--- a/plugins/SliceInfoPlugin/SliceInfo.py
+++ b/plugins/SliceInfoPlugin/SliceInfo.py
@@ -18,6 +18,8 @@ from UM.Logger import Logger
from UM.PluginRegistry import PluginRegistry
from UM.Qt.Duration import DurationFormat
+from cura import ApplicationMetadata
+
from .SliceInfoJob import SliceInfoJob
@@ -119,6 +121,7 @@ class SliceInfo(QObject, Extension):
data["time_stamp"] = time.time()
data["schema_version"] = 0
data["cura_version"] = application.getVersion()
+ data["cura_build_type"] = ApplicationMetadata.CuraBuildType
active_mode = Application.getInstance().getPreferences().getValue("cura/active_mode")
if active_mode == 0:
@@ -174,6 +177,7 @@ class SliceInfo(QObject, Extension):
extruder_dict["extruder_settings"] = extruder_settings
data["extruders"].append(extruder_dict)
+ data["intent_category"] = global_stack.getIntentCategory()
data["quality_profile"] = global_stack.quality.getMetaData().get("quality_type")
data["user_modified_setting_keys"] = self._getUserModifiedSettingKeys()
diff --git a/plugins/SliceInfoPlugin/example_data.html b/plugins/SliceInfoPlugin/example_data.html
index 4294b0af6d..103eb55a6a 100644
--- a/plugins/SliceInfoPlugin/example_data.html
+++ b/plugins/SliceInfoPlugin/example_data.html
@@ -4,6 +4,7 @@
Operating System: Windows 10
Language: en_US
Machine Type: Ultimaker S5
+ Intent Profile: Default
Quality Profile: Fast
Using Custom Settings: No
diff --git a/plugins/SliceInfoPlugin/plugin.json b/plugins/SliceInfoPlugin/plugin.json
index 8ff0e194fb..8975f52591 100644
--- a/plugins/SliceInfoPlugin/plugin.json
+++ b/plugins/SliceInfoPlugin/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Submits anonymous slice info. Can be disabled through preferences.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/SolidView/plugin.json b/plugins/SolidView/plugin.json
index b3f62221c5..716f2d8d89 100644
--- a/plugins/SolidView/plugin.json
+++ b/plugins/SolidView/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides a normal solid mesh view.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
\ No newline at end of file
diff --git a/plugins/SupportEraser/plugin.json b/plugins/SupportEraser/plugin.json
index fa6d6d230e..888c3df50d 100644
--- a/plugins/SupportEraser/plugin.json
+++ b/plugins/SupportEraser/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Creates an eraser mesh to block the printing of support in certain places",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/Toolbox/plugin.json b/plugins/Toolbox/plugin.json
index 61dc0429f5..0b967e1645 100644
--- a/plugins/Toolbox/plugin.json
+++ b/plugins/Toolbox/plugin.json
@@ -2,6 +2,6 @@
"name": "Toolbox",
"author": "Ultimaker B.V.",
"version": "1.0.1",
- "api": "6.0",
+ "api": "7.0",
"description": "Find, manage and install new Cura packages."
}
diff --git a/plugins/Toolbox/resources/qml/Toolbox.qml b/plugins/Toolbox/resources/qml/Toolbox.qml
index f70dab03d8..d6d862b5f6 100644
--- a/plugins/Toolbox/resources/qml/Toolbox.qml
+++ b/plugins/Toolbox/resources/qml/Toolbox.qml
@@ -1,11 +1,17 @@
// Copyright (c) 2018 Ultimaker B.V.
// Toolbox is released under the terms of the LGPLv3 or higher.
+// Main window for the Toolbox
+
import QtQuick 2.2
import QtQuick.Dialogs 1.1
import QtQuick.Window 2.2
import UM 1.1 as UM
+import "./pages"
+import "./dialogs"
+import "./components"
+
Window
{
id: base
@@ -14,8 +20,8 @@ Window
modality: Qt.ApplicationModal
flags: Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint
- width: Math.floor(720 * screenScaleFactor)
- height: Math.floor(640 * screenScaleFactor)
+ width: UM.Theme.getSize("large_popup_dialog").width
+ height: UM.Theme.getSize("large_popup_dialog").height
minimumWidth: width
maximumWidth: minimumWidth
minimumHeight: height
@@ -29,9 +35,16 @@ Window
Item
{
anchors.fill: parent
+
+ WelcomePage
+ {
+ visible: toolbox.viewPage === "welcome"
+ }
+
ToolboxHeader
{
id: header
+ visible: toolbox.viewPage !== "welcome"
}
Item
diff --git a/plugins/Toolbox/resources/qml/RatingWidget.qml b/plugins/Toolbox/resources/qml/components/RatingWidget.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/RatingWidget.qml
rename to plugins/Toolbox/resources/qml/components/RatingWidget.qml
diff --git a/plugins/Toolbox/resources/qml/SmallRatingWidget.qml b/plugins/Toolbox/resources/qml/components/SmallRatingWidget.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/SmallRatingWidget.qml
rename to plugins/Toolbox/resources/qml/components/SmallRatingWidget.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxActionButtonStyle.qml b/plugins/Toolbox/resources/qml/components/ToolboxActionButtonStyle.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxActionButtonStyle.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxActionButtonStyle.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml b/plugins/Toolbox/resources/qml/components/ToolboxBackColumn.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxBackColumn.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxBackColumn.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml b/plugins/Toolbox/resources/qml/components/ToolboxCompatibilityChart.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxCompatibilityChart.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailList.qml b/plugins/Toolbox/resources/qml/components/ToolboxDetailList.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxDetailList.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxDetailList.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml b/plugins/Toolbox/resources/qml/components/ToolboxDetailTile.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxDetailTile.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxDetailTile.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml b/plugins/Toolbox/resources/qml/components/ToolboxDetailTileActions.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxDetailTileActions.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml b/plugins/Toolbox/resources/qml/components/ToolboxDownloadsGrid.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxDownloadsGrid.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml b/plugins/Toolbox/resources/qml/components/ToolboxDownloadsGridTile.qml
similarity index 97%
rename from plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxDownloadsGridTile.qml
index 73dd593336..78cdf1562a 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml
+++ b/plugins/Toolbox/resources/qml/components/ToolboxDownloadsGridTile.qml
@@ -67,7 +67,7 @@ Item
width: UM.Theme.getSize("toolbox_thumbnail_small").width - UM.Theme.getSize("wide_margin").width
height: UM.Theme.getSize("toolbox_thumbnail_small").height - UM.Theme.getSize("wide_margin").width
fillMode: Image.PreserveAspectFit
- source: model.icon_url || "../images/logobot.svg"
+ source: model.icon_url || "../../images/logobot.svg"
mipmap: true
}
UM.RecolorImage
@@ -82,7 +82,7 @@ Item
sourceSize.height: height
visible: installedPackages != 0
color: (installedPackages >= packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border")
- source: "../images/installed_check.svg"
+ source: "../../images/installed_check.svg"
}
}
Item
diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml b/plugins/Toolbox/resources/qml/components/ToolboxDownloadsShowcase.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxDownloadsShowcase.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml b/plugins/Toolbox/resources/qml/components/ToolboxDownloadsShowcaseTile.qml
similarity index 97%
rename from plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxDownloadsShowcaseTile.qml
index 89348b18de..f6e32b2d84 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml
+++ b/plugins/Toolbox/resources/qml/components/ToolboxDownloadsShowcaseTile.qml
@@ -23,7 +23,7 @@ Rectangle
height: UM.Theme.getSize("toolbox_thumbnail_large").height - 4 * UM.Theme.getSize("default_margin").height
width: UM.Theme.getSize("toolbox_thumbnail_large").height - 4 * UM.Theme.getSize("default_margin").height
fillMode: Image.PreserveAspectFit
- source: model.icon_url || "../images/logobot.svg"
+ source: model.icon_url || "../../images/logobot.svg"
mipmap: true
anchors
{
@@ -62,7 +62,7 @@ Rectangle
}
visible: installedPackages != 0
color: (installedPackages >= packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border")
- source: "../images/installed_check.svg"
+ source: "../../images/installed_check.svg"
}
SmallRatingWidget
diff --git a/plugins/Toolbox/resources/qml/ToolboxFooter.qml b/plugins/Toolbox/resources/qml/components/ToolboxFooter.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxFooter.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxFooter.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxHeader.qml b/plugins/Toolbox/resources/qml/components/ToolboxHeader.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxHeader.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxHeader.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml b/plugins/Toolbox/resources/qml/components/ToolboxInstalledTile.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxInstalledTile.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml b/plugins/Toolbox/resources/qml/components/ToolboxInstalledTileActions.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxInstalledTileActions.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml b/plugins/Toolbox/resources/qml/components/ToolboxProgressButton.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxProgressButton.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxProgressButton.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxShadow.qml b/plugins/Toolbox/resources/qml/components/ToolboxShadow.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxShadow.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxShadow.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxTabButton.qml b/plugins/Toolbox/resources/qml/components/ToolboxTabButton.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxTabButton.qml
rename to plugins/Toolbox/resources/qml/components/ToolboxTabButton.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml b/plugins/Toolbox/resources/qml/dialogs/ToolboxConfirmUninstallResetDialog.qml
similarity index 96%
rename from plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml
rename to plugins/Toolbox/resources/qml/dialogs/ToolboxConfirmUninstallResetDialog.qml
index 81649fdfef..1b5e4d1d46 100644
--- a/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml
+++ b/plugins/Toolbox/resources/qml/dialogs/ToolboxConfirmUninstallResetDialog.qml
@@ -14,7 +14,7 @@ import Cura 1.0 as Cura
UM.Dialog
{
- // This dialog asks the user whether he/she wants to open a project file as a project or import models.
+ // This dialog asks the user to confirm he/she wants to uninstall materials/pprofiles which are currently in use
id: base
title: catalog.i18nc("@title:window", "Confirm uninstall") + toolbox.pluginToUninstall
diff --git a/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml b/plugins/Toolbox/resources/qml/dialogs/ToolboxLicenseDialog.qml
similarity index 90%
rename from plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml
rename to plugins/Toolbox/resources/qml/dialogs/ToolboxLicenseDialog.qml
index 40b22c268d..f7edde1fff 100644
--- a/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml
+++ b/plugins/Toolbox/resources/qml/dialogs/ToolboxLicenseDialog.qml
@@ -30,7 +30,7 @@ UM.Dialog
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
- text: licenseDialog.pluginName + catalog.i18nc("@label", "This plugin contains a license.\nYou need to accept this license to install this plugin.\nDo you agree with the terms below?")
+ text: licenseDialog.pluginName + ": " + catalog.i18nc("@label", "This plugin contains a license.\nYou need to accept this license to install this plugin.\nDo you agree with the terms below?")
wrapMode: Text.Wrap
renderType: Text.NativeRendering
}
diff --git a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml b/plugins/Toolbox/resources/qml/pages/ToolboxAuthorPage.qml
similarity index 98%
rename from plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml
rename to plugins/Toolbox/resources/qml/pages/ToolboxAuthorPage.qml
index 08ac1f83a5..d1abe48de1 100644
--- a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml
+++ b/plugins/Toolbox/resources/qml/pages/ToolboxAuthorPage.qml
@@ -6,6 +6,8 @@ import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import UM 1.1 as UM
+import "../components"
+
Item
{
id: page
@@ -31,7 +33,7 @@ Item
width: UM.Theme.getSize("toolbox_thumbnail_medium").width
height: UM.Theme.getSize("toolbox_thumbnail_medium").height
fillMode: Image.PreserveAspectFit
- source: details.icon_url || "../images/logobot.svg"
+ source: details.icon_url || "../../images/logobot.svg"
mipmap: true
anchors
{
diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml b/plugins/Toolbox/resources/qml/pages/ToolboxDetailPage.qml
similarity index 99%
rename from plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
rename to plugins/Toolbox/resources/qml/pages/ToolboxDetailPage.qml
index 1773ef9053..6d34e23f42 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
+++ b/plugins/Toolbox/resources/qml/pages/ToolboxDetailPage.qml
@@ -8,6 +8,8 @@ import UM 1.1 as UM
import Cura 1.1 as Cura
+import "../components"
+
Item
{
id: page
@@ -44,7 +46,7 @@ Item
{
anchors.fill: parent
fillMode: Image.PreserveAspectFit
- source: details === null ? "" : (details.icon_url || "../images/logobot.svg")
+ source: details === null ? "" : (details.icon_url || "../../images/logobot.svg")
mipmap: true
}
}
diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml b/plugins/Toolbox/resources/qml/pages/ToolboxDownloadsPage.qml
similarity index 98%
rename from plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml
rename to plugins/Toolbox/resources/qml/pages/ToolboxDownloadsPage.qml
index 57fb3a9279..9be8cbe2b9 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml
+++ b/plugins/Toolbox/resources/qml/pages/ToolboxDownloadsPage.qml
@@ -5,6 +5,8 @@ import QtQuick 2.10
import QtQuick.Controls 2.3
import UM 1.1 as UM
+import "../components"
+
ScrollView
{
clip: true
diff --git a/plugins/Toolbox/resources/qml/ToolboxErrorPage.qml b/plugins/Toolbox/resources/qml/pages/ToolboxErrorPage.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxErrorPage.qml
rename to plugins/Toolbox/resources/qml/pages/ToolboxErrorPage.qml
diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml b/plugins/Toolbox/resources/qml/pages/ToolboxInstalledPage.qml
similarity index 99%
rename from plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml
rename to plugins/Toolbox/resources/qml/pages/ToolboxInstalledPage.qml
index f4a9e634c4..99590c712c 100644
--- a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml
+++ b/plugins/Toolbox/resources/qml/pages/ToolboxInstalledPage.qml
@@ -6,6 +6,8 @@ import QtQuick.Controls 2.3
import UM 1.1 as UM
+import "../components"
+
ScrollView
{
id: page
diff --git a/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml b/plugins/Toolbox/resources/qml/pages/ToolboxLoadingPage.qml
similarity index 100%
rename from plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml
rename to plugins/Toolbox/resources/qml/pages/ToolboxLoadingPage.qml
diff --git a/plugins/Toolbox/resources/qml/pages/WelcomePage.qml b/plugins/Toolbox/resources/qml/pages/WelcomePage.qml
new file mode 100644
index 0000000000..cbfdf8f402
--- /dev/null
+++ b/plugins/Toolbox/resources/qml/pages/WelcomePage.qml
@@ -0,0 +1,53 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
+import QtQuick 2.7
+import QtQuick.Controls 2.1
+import QtQuick.Window 2.2
+
+import UM 1.3 as UM
+import Cura 1.1 as Cura
+
+Column
+{
+ id: welcomePage
+ spacing: UM.Theme.getSize("wide_margin").height
+ width: parent.width
+ height: childrenRect.height
+ anchors.centerIn: parent
+
+ Image
+ {
+ id: profileImage
+ fillMode: Image.PreserveAspectFit
+ source: "../../images/logobot.svg"
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: Math.round(parent.width / 4)
+ }
+
+ Label
+ {
+ id: welcomeTextLabel
+ text: catalog.i18nc("@description", "Get plugins and materials verified by Ultimaker")
+ width: Math.round(parent.width / 2)
+ font: UM.Theme.getFont("default")
+ color: UM.Theme.getColor("text")
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ wrapMode: Label.WordWrap
+ renderType: Text.NativeRendering
+ }
+
+ Cura.PrimaryButton
+ {
+ id: loginButton
+ width: UM.Theme.getSize("account_button").width
+ height: UM.Theme.getSize("account_button").height
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: catalog.i18nc("@button", "Sign in")
+ onClicked: Cura.API.account.login()
+ fixedWidthMode: true
+ }
+}
+
diff --git a/plugins/Toolbox/src/ConfigsModel.py b/plugins/Toolbox/src/ConfigsModel.py
index dd54d53d93..9ba65caaa4 100644
--- a/plugins/Toolbox/src/ConfigsModel.py
+++ b/plugins/Toolbox/src/ConfigsModel.py
@@ -1,11 +1,10 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-import re
-from typing import Dict
from PyQt5.QtCore import Qt, pyqtProperty
from UM.Qt.ListModel import ListModel
+
## Model that holds supported configurations (for material/quality packages).
class ConfigsModel(ListModel):
def __init__(self, parent = None):
diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py
index 4dabba87a0..27197275b8 100644
--- a/plugins/Toolbox/src/Toolbox.py
+++ b/plugins/Toolbox/src/Toolbox.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Toolbox is released under the terms of the LGPLv3 or higher.
import json
@@ -19,6 +19,7 @@ from UM.Version import Version
from cura import ApplicationMetadata
from cura import UltimakerCloudAuthentication
from cura.CuraApplication import CuraApplication
+from cura.Machines.ContainerTree import ContainerTree
from .AuthorsModel import AuthorsModel
from .PackagesModel import PackagesModel
@@ -47,7 +48,7 @@ class Toolbox(QObject, Extension):
self._download_progress = 0 # type: float
self._is_downloading = False # type: bool
self._network_manager = None # type: Optional[QNetworkAccessManager]
- self._request_headers = [] # type: List[Tuple[bytes, bytes]]
+ self._request_headers = [] # type: List[Tuple[bytes, bytes]]
self._updateRequestHeader()
self._request_urls = {} # type: Dict[str, QUrl]
@@ -58,13 +59,15 @@ class Toolbox(QObject, Extension):
# The responses as given by the server parsed to a list.
self._server_response_data = {
"authors": [],
- "packages": []
+ "packages": [],
+ "updates": [],
} # type: Dict[str, List[Any]]
# Models:
self._models = {
"authors": AuthorsModel(self),
"packages": PackagesModel(self),
+ "updates": PackagesModel(self),
} # type: Dict[str, Union[AuthorsModel, PackagesModel]]
self._plugins_showcase_model = PackagesModel(self)
@@ -85,7 +88,7 @@ class Toolbox(QObject, Extension):
# View page defines which type of page layout to use. For example,
# possible values include "overview", "detail" or "author".
- self._view_page = "loading" # type: str
+ self._view_page = "welcome" # type: str
# Active package refers to which package is currently being downloaded,
# installed, or otherwise modified.
@@ -104,7 +107,6 @@ class Toolbox(QObject, Extension):
self._restart_dialog_message = "" # type: str
self._application.initializationFinished.connect(self._onAppInitialized)
- self._application.getCuraAPI().account.loginStateChanged.connect(self._updateRequestHeader)
self._application.getCuraAPI().account.accessTokenChanged.connect(self._updateRequestHeader)
# Signals:
@@ -125,6 +127,16 @@ class Toolbox(QObject, Extension):
showLicenseDialog = pyqtSignal()
uninstallVariablesChanged = pyqtSignal()
+ ## Go back to the start state (welcome screen or loading if no login required)
+ def _restart(self):
+ self._updateRequestHeader()
+ # For an Essentials build, login is mandatory
+ if not self._application.getCuraAPI().account.isLoggedIn and ApplicationMetadata.IsEnterpriseVersion:
+ self.setViewPage("welcome")
+ else:
+ self.setViewPage("loading")
+ self._fetchPackageData()
+
def _updateRequestHeader(self):
self._request_headers = [
(b"User-Agent",
@@ -185,18 +197,27 @@ class Toolbox(QObject, Extension):
cloud_api_version = self._cloud_api_version,
sdk_version = self._sdk_version
)
+
+ # We need to construct a query like installed_packages=ID:VERSION&installed_packages=ID:VERSION, etc.
+ installed_package_ids_with_versions = [":".join(items) for items in
+ self._package_manager.getAllInstalledPackageIdsAndVersions()]
+ installed_packages_query = "&installed_packages=".join(installed_package_ids_with_versions)
+
self._request_urls = {
"authors": QUrl("{base_url}/authors".format(base_url = self._api_url)),
- "packages": QUrl("{base_url}/packages".format(base_url = self._api_url))
+ "packages": QUrl("{base_url}/packages".format(base_url = self._api_url)),
+ "updates": QUrl("{base_url}/packages/package-updates?installed_packages={query}".format(
+ base_url = self._api_url, query = installed_packages_query))
}
- # Request the latest and greatest!
- self._fetchPackageData()
+ self._application.getCuraAPI().account.loginStateChanged.connect(self._restart)
- def _fetchPackageData(self):
- # Create the network manager:
- # This was formerly its own function but really had no reason to be as
- # it was never called more than once ever.
+ # On boot we check which packages have updates.
+ if CuraApplication.getInstance().getPreferences().getValue("info/automatic_update_check") and len(installed_package_ids_with_versions) > 0:
+ # Request the latest and greatest!
+ self._fetchPackageUpdates()
+
+ def _prepareNetworkManager(self):
if self._network_manager is not None:
self._network_manager.finished.disconnect(self._onRequestFinished)
self._network_manager.networkAccessibleChanged.disconnect(self._onNetworkAccessibleChanged)
@@ -204,16 +225,21 @@ class Toolbox(QObject, Extension):
self._network_manager.finished.connect(self._onRequestFinished)
self._network_manager.networkAccessibleChanged.connect(self._onNetworkAccessibleChanged)
+ def _fetchPackageUpdates(self):
+ self._prepareNetworkManager()
+ self._makeRequestByType("updates")
+
+ def _fetchPackageData(self):
+ self._prepareNetworkManager()
# Make remote requests:
self._makeRequestByType("packages")
self._makeRequestByType("authors")
-
# Gather installed packages:
self._updateInstalledModels()
+ # Displays the toolbox
@pyqtSlot()
- def browsePackages(self) -> None:
- self._fetchPackageData()
+ def launch(self) -> None:
if not self._dialog:
self._dialog = self._createDialog("Toolbox.qml")
@@ -222,6 +248,8 @@ class Toolbox(QObject, Extension):
Logger.log("e", "Unexpected error trying to create the 'Marketplace' dialog.")
return
+ self._restart()
+
self._dialog.show()
# Apply enabled/disabled state to installed plugins
@@ -233,7 +261,7 @@ class Toolbox(QObject, Extension):
if not plugin_path:
return None
path = os.path.join(plugin_path, "resources", "qml", qml_name)
-
+
dialog = self._application.createQmlComponent(path, {"toolbox": self})
if not dialog:
raise Exception("Failed to create Marketplace dialog")
@@ -327,7 +355,7 @@ class Toolbox(QObject, Extension):
self._package_used_qualities = package_used_qualities
# Ask change to default material / profile
if self._confirm_reset_dialog is None:
- self._confirm_reset_dialog = self._createDialog("ToolboxConfirmUninstallResetDialog.qml")
+ self._confirm_reset_dialog = self._createDialog("dialogs/ToolboxConfirmUninstallResetDialog.qml")
self.uninstallVariablesChanged.emit()
if self._confirm_reset_dialog is None:
Logger.log("e", "ToolboxConfirmUninstallResetDialog should have been initialized, but it is not. Not showing dialog and not uninstalling package.")
@@ -359,15 +387,22 @@ class Toolbox(QObject, Extension):
@pyqtSlot()
def resetMaterialsQualitiesAndUninstall(self) -> None:
application = CuraApplication.getInstance()
- material_manager = application.getMaterialManager()
- quality_manager = application.getQualityManager()
machine_manager = application.getMachineManager()
+ container_tree = ContainerTree.getInstance()
for global_stack, extruder_nr, container_id in self._package_used_materials:
- default_material_node = material_manager.getDefaultMaterial(global_stack, extruder_nr, global_stack.extruders[extruder_nr].variant.getName())
+ extruder = global_stack.extruderList[int(extruder_nr)]
+ approximate_diameter = extruder.getApproximateMaterialDiameter()
+ variant_node = container_tree.machines[global_stack.definition.getId()].variants[extruder.variant.getName()]
+ default_material_node = variant_node.preferredMaterial(approximate_diameter)
machine_manager.setMaterial(extruder_nr, default_material_node, global_stack = global_stack)
for global_stack, extruder_nr, container_id in self._package_used_qualities:
- default_quality_group = quality_manager.getDefaultQualityType(global_stack)
+ variant_names = [extruder.variant.getName() for extruder in global_stack.extruderList]
+ material_bases = [extruder.material.getMetaDataEntry("base_file") for extruder in global_stack.extruderList]
+ extruder_enabled = [extruder.isEnabled for extruder in global_stack.extruderList]
+ definition_id = global_stack.definition.getId()
+ machine_node = container_tree.machines[definition_id]
+ default_quality_group = machine_node.getQualityGroups(variant_names, material_bases, extruder_enabled)[machine_node.preferred_quality_type]
machine_manager.setQualityGroup(default_quality_group, global_stack = global_stack)
if self._package_id_to_uninstall is not None:
@@ -610,7 +645,7 @@ class Toolbox(QObject, Extension):
if not self._models[response_type]:
Logger.log("e", "Could not find the %s model.", response_type)
break
-
+
self._server_response_data[response_type] = json_data["data"]
self._models[response_type].setMetadata(self._server_response_data[response_type])
@@ -622,6 +657,10 @@ class Toolbox(QObject, Extension):
elif response_type == "authors":
self._models[response_type].setFilter({"package_types": "material"})
self._models[response_type].setFilter({"tags": "generic"})
+ elif response_type == "updates":
+ # Tell the package manager that there's a new set of updates available.
+ packages = set([pkg["package_id"] for pkg in self._server_response_data[response_type]])
+ self._package_manager.setPackagesWithUpdate(packages)
self.metadataChanged.emit()
@@ -652,7 +691,7 @@ class Toolbox(QObject, Extension):
self.setIsDownloading(False)
self._download_reply = cast(QNetworkReply, self._download_reply)
self._download_reply.downloadProgress.disconnect(self._onDownloadProgress)
-
+
# Check if the download was sucessfull
if self._download_reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200:
try:
diff --git a/plugins/TrimeshReader/plugin.json b/plugins/TrimeshReader/plugin.json
index 61c66aa5e8..dbe937b01d 100644
--- a/plugins/TrimeshReader/plugin.json
+++ b/plugins/TrimeshReader/plugin.json
@@ -3,5 +3,5 @@
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Provides support for reading model files.",
- "api": "6.0.0"
+ "api": "7.0.0"
}
diff --git a/plugins/UFPReader/plugin.json b/plugins/UFPReader/plugin.json
index b56b555b36..a88a9c3ab0 100644
--- a/plugins/UFPReader/plugin.json
+++ b/plugins/UFPReader/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Provides support for reading Ultimaker Format Packages.",
- "supported_sdk_versions": ["6.0.0"],
+ "supported_sdk_versions": ["7.0.0"],
"i18n-catalog": "cura"
}
\ No newline at end of file
diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py
index 9306e0fa4e..e085adfd47 100644
--- a/plugins/UFPWriter/UFPWriter.py
+++ b/plugins/UFPWriter/UFPWriter.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.
from typing import cast
@@ -7,13 +7,13 @@ from Charon.VirtualFile import VirtualFile #To open UFP files.
from Charon.OpenMode import OpenMode #To indicate that we want to write to UFP files.
from io import StringIO #For converting g-code to bytes.
-from UM.Application import Application
from UM.Logger import Logger
from UM.Mesh.MeshWriter import MeshWriter #The writer we need to implement.
from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
from UM.PluginRegistry import PluginRegistry #To get the g-code writer.
from PyQt5.QtCore import QBuffer
+from cura.CuraApplication import CuraApplication
from cura.Snapshot import Snapshot
from cura.Utils.Threading import call_on_qt_thread
@@ -83,9 +83,9 @@ class UFPWriter(MeshWriter):
Logger.log("d", "Thumbnail not created, cannot save it")
# Store the material.
- application = Application.getInstance()
+ application = CuraApplication.getInstance()
machine_manager = application.getMachineManager()
- material_manager = application.getMaterialManager()
+ container_registry = application.getContainerRegistry()
global_stack = machine_manager.activeMachine
material_extension = "xml.fdm_material"
@@ -111,12 +111,12 @@ class UFPWriter(MeshWriter):
continue
material_root_id = material.getMetaDataEntry("base_file")
- material_group = material_manager.getMaterialGroup(material_root_id)
- if material_group is None:
- Logger.log("e", "Cannot find material container with root id [%s]", material_root_id)
+ material_root_query = container_registry.findContainers(id = material_root_id)
+ if not material_root_query:
+ Logger.log("e", "Cannot find material container with root id {root_id}".format(root_id = material_root_id))
return False
+ material_container = material_root_query[0]
- material_container = material_group.root_material_node.getContainer()
try:
serialized_material = material_container.serialize()
except NotImplementedError:
diff --git a/plugins/UFPWriter/plugin.json b/plugins/UFPWriter/plugin.json
index 288d6acf77..35fd18f05e 100644
--- a/plugins/UFPWriter/plugin.json
+++ b/plugins/UFPWriter/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides support for writing Ultimaker Format Packages.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/plugin.json b/plugins/UM3NetworkPrinting/plugin.json
index 039b412643..193ba63d83 100644
--- a/plugins/UM3NetworkPrinting/plugin.json
+++ b/plugins/UM3NetworkPrinting/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"description": "Manages network connections to Ultimaker networked printers.",
"version": "2.0.0",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml b/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml
index a604bac20c..59a0148550 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml
@@ -291,8 +291,8 @@ Cura.MachineAction
MessageDialog
{
id: invalidIPAddressMessageDialog
- x: (parent.x + (parent.width) / 2) | 0
- y: (parent.y + (parent.height) / 2) | 0
+ x: parent ? (parent.x + (parent.width) / 2) : 0
+ y: parent ? (parent.y + (parent.height) / 2) : 0
title: catalog.i18nc("@title:window", "Invalid IP address")
text: catalog.i18nc("@text", "Please enter a valid IP address.")
icon: StandardIcon.Warning
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/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py
index c4929fc2d1..ccc64f8073 100644
--- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py
+++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py
@@ -15,7 +15,6 @@ from cura.Settings.GlobalStack import GlobalStack
from .CloudApiClient import CloudApiClient
from .CloudOutputDevice import CloudOutputDevice
from ..Models.Http.CloudClusterResponse import CloudClusterResponse
-from ..Messages.CloudPrinterDetectedMessage import CloudPrinterDetectedMessage
## The cloud output device manager is responsible for using the Ultimaker Cloud APIs to manage remote clusters.
@@ -111,7 +110,6 @@ class CloudOutputDeviceManager:
)
self._remote_clusters[device.getId()] = device
self.discoveredDevicesChanged.emit()
- self._checkIfNewClusterWasAdded(device.clusterData.cluster_id)
self._connectToActiveMachine()
def _onDiscoveredDeviceUpdated(self, cluster_data: CloudClusterResponse) -> None:
@@ -183,11 +181,4 @@ class CloudOutputDeviceManager:
output_device_manager = CuraApplication.getInstance().getOutputDeviceManager()
if device.key not in output_device_manager.getOutputDeviceIds():
- output_device_manager.addOutputDevice(device)
-
- ## Checks if Cura has a machine stack (printer) for the given cluster ID and shows a message if it hasn't.
- def _checkIfNewClusterWasAdded(self, cluster_id: str) -> None:
- container_registry = CuraApplication.getInstance().getContainerRegistry()
- cloud_machines = container_registry.findContainersMetadata(**{self.META_CLUSTER_ID: "*"}) # all cloud machines
- if not any(machine[self.META_CLUSTER_ID] == cluster_id for machine in cloud_machines):
- CloudPrinterDetectedMessage().show()
+ output_device_manager.addOutputDevice(device)
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py b/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py
deleted file mode 100644
index 3a1a9f0e0f..0000000000
--- a/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2019 Ultimaker B.V.
-# Cura is released under the terms of the LGPLv3 or higher.
-from UM import i18nCatalog
-from UM.Message import Message
-from cura.CuraApplication import CuraApplication
-
-I18N_CATALOG = i18nCatalog("cura")
-
-
-## Message shown when a new printer was added to your account but not yet in Cura.
-class CloudPrinterDetectedMessage(Message):
-
- # Singleton used to prevent duplicate messages of this type at the same time.
- __is_visible = False
-
- # Store in preferences to hide this message in the future.
- _preference_key = "cloud/block_new_printers_popup"
-
- def __init__(self) -> None:
- super().__init__(
- title=I18N_CATALOG.i18nc("@info:title", "New cloud printers found"),
- text=I18N_CATALOG.i18nc("@info:message", "New printers have been found connected to your account, "
- "you can find them in your list of discovered printers."),
- lifetime=0,
- dismissable=True,
- option_state=False,
- option_text=I18N_CATALOG.i18nc("@info:option_text", "Do not show this message again")
- )
- self.optionToggled.connect(self._onDontAskMeAgain)
- CuraApplication.getInstance().getPreferences().addPreference(self._preference_key, False)
-
- def show(self) -> None:
- if CuraApplication.getInstance().getPreferences().getValue(self._preference_key):
- return
- if CloudPrinterDetectedMessage.__is_visible:
- return
- super().show()
- CloudPrinterDetectedMessage.__is_visible = True
-
- def hide(self, send_signal = True) -> None:
- super().hide(send_signal)
- CloudPrinterDetectedMessage.__is_visible = False
-
- def _onDontAskMeAgain(self, checked: bool) -> None:
- CuraApplication.getInstance().getPreferences().setValue(self._preference_key, checked)
diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobStatus.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobStatus.py
index e54d99f1e6..9794da1bbb 100644
--- a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobStatus.py
+++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobStatus.py
@@ -2,8 +2,6 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import List, Optional, Union, Dict, Any
-from PyQt5.QtCore import QUrl
-
from cura.PrinterOutput.Models.PrinterConfigurationModel import PrinterConfigurationModel
from .ClusterBuildPlate import ClusterBuildPlate
diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterConfigurationMaterial.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterConfigurationMaterial.py
index 378a885a3b..8edb9fb808 100644
--- a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterConfigurationMaterial.py
+++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterConfigurationMaterial.py
@@ -1,8 +1,9 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+
from typing import Optional
-from cura.CuraApplication import CuraApplication
+from UM.Settings.ContainerRegistry import ContainerRegistry
from cura.PrinterOutput.Models.MaterialOutputModel import MaterialOutputModel
from ..BaseModel import BaseModel
@@ -24,32 +25,27 @@ class ClusterPrinterConfigurationMaterial(BaseModel):
self.material = material
super().__init__(**kwargs)
- ## Creates a material output model based on this cloud printer material.
+ ## Creates a material output model based on this cloud printer material.
+ #
+ # A material is chosen that matches the current GUID. If multiple such
+ # materials are available, read-only materials are preferred and the
+ # material with the earliest alphabetical name will be selected.
+ # \return A material output model that matches the current GUID.
def createOutputModel(self) -> MaterialOutputModel:
- material_manager = CuraApplication.getInstance().getMaterialManager()
- material_group_list = material_manager.getMaterialGroupListByGUID(self.guid) or []
-
- # Sort the material groups by "is_read_only = True" first, and then the name alphabetically.
- read_only_material_group_list = list(filter(lambda x: x.is_read_only, material_group_list))
- non_read_only_material_group_list = list(filter(lambda x: not x.is_read_only, material_group_list))
- material_group = None
- if read_only_material_group_list:
- read_only_material_group_list = sorted(read_only_material_group_list, key = lambda x: x.name)
- material_group = read_only_material_group_list[0]
- elif non_read_only_material_group_list:
- non_read_only_material_group_list = sorted(non_read_only_material_group_list, key = lambda x: x.name)
- material_group = non_read_only_material_group_list[0]
-
- if material_group:
- container = material_group.root_material_node.getContainer()
- color = container.getMetaDataEntry("color_code")
- brand = container.getMetaDataEntry("brand")
- material_type = container.getMetaDataEntry("material")
- name = container.getName()
+ container_registry = ContainerRegistry.getInstance()
+ same_guid = container_registry.findInstanceContainersMetadata(GUID = self.guid)
+ if same_guid:
+ read_only = sorted(filter(lambda metadata: container_registry.isReadOnly(metadata["id"]), same_guid), key = lambda metadata: metadata["name"])
+ if read_only:
+ material_metadata = read_only[0]
+ else:
+ material_metadata = min(same_guid, key = lambda metadata: metadata["name"])
else:
- color = self.color
- brand = self.brand
- material_type = self.material
- name = "Empty" if self.material == "empty" else "Unknown"
+ material_metadata = {
+ "color_code": self.color,
+ "brand": self.brand,
+ "material": self.material,
+ "name": "Empty" if self.material == "empty" else "Unknown"
+ }
- return MaterialOutputModel(guid=self.guid, type=material_type, brand=brand, color=color, name=name)
+ return MaterialOutputModel(guid = self.guid, type = material_metadata["material"], brand = material_metadata["brand"], color = material_metadata["color_code"], name = material_metadata["name"])
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/SendMaterialJob.py b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py
index 2ad21d2f29..09949ed37e 100644
--- a/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py
+++ b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py
@@ -6,6 +6,7 @@ from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest
from UM.Job import Job
from UM.Logger import Logger
+from UM.Settings import ContainerRegistry
from cura.CuraApplication import CuraApplication
from ..Models.Http.ClusterMaterial import ClusterMaterial
@@ -67,10 +68,10 @@ class SendMaterialJob(Job):
# \param materials_to_send A set with id's of materials that must be sent.
def _sendMaterials(self, materials_to_send: Set[str]) -> None:
container_registry = CuraApplication.getInstance().getContainerRegistry()
- material_manager = CuraApplication.getInstance().getMaterialManager()
- material_group_dict = material_manager.getAllMaterialGroups()
+ all_materials = container_registry.findInstanceContainersMetadata(type = "material")
+ all_base_files = {material["base_file"] for material in all_materials if "base_file" in material} # Filters out uniques by making it a set. Don't include files without base file (i.e. empty material).
- for root_material_id in material_group_dict:
+ for root_material_id in all_base_files:
if root_material_id not in materials_to_send:
# If the material does not have to be sent we skip it.
continue
@@ -127,20 +128,18 @@ class SendMaterialJob(Job):
@staticmethod
def _getLocalMaterials() -> Dict[str, LocalMaterial]:
result = {} # type: Dict[str, LocalMaterial]
- material_manager = CuraApplication.getInstance().getMaterialManager()
- material_group_dict = material_manager.getAllMaterialGroups()
+ all_materials = CuraApplication.getInstance().getContainerRegistry().findInstanceContainersMetadata(type = "material")
+ all_base_files = [material for material in all_materials if material["id"] == material.get("base_file")] # Don't send materials without base_file: The empty material doesn't need to be sent.
# Find the latest version of all material containers in the registry.
- for root_material_id, material_group in material_group_dict.items():
- material_metadata = material_group.root_material_node.getMetadata()
-
+ for material_metadata in all_base_files:
try:
# material version must be an int
material_metadata["version"] = int(material_metadata["version"])
# Create a new local material
local_material = LocalMaterial(**material_metadata)
- local_material.id = root_material_id
+ local_material.id = material_metadata["id"]
if local_material.GUID not in result or \
local_material.GUID not in result or \
diff --git a/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py b/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py
index b6416b2bd0..421246fb95 100644
--- a/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py
+++ b/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py
@@ -36,9 +36,15 @@ class ZeroConfClient:
def start(self) -> None:
self._service_changed_request_queue = Queue()
self._service_changed_request_event = Event()
- self._service_changed_request_thread = Thread(target=self._handleOnServiceChangedRequests, daemon=True)
+ try:
+ self._zero_conf = Zeroconf()
+ # CURA-6855 catch WinErrors
+ except OSError:
+ Logger.logException("e", "Failed to create zeroconf instance.")
+ return
+
+ self._service_changed_request_thread = Thread(target = self._handleOnServiceChangedRequests, daemon = True, name = "ZeroConfServiceChangedThread")
self._service_changed_request_thread.start()
- self._zero_conf = Zeroconf()
self._zero_conf_browser = ServiceBrowser(self._zero_conf, self.ZERO_CONF_NAME, [self._queueService])
# Cleanup ZeroConf resources.
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index e32e4c8745..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.
@@ -328,7 +328,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
def _setFirmwareName(self, name):
new_name = re.findall(r"FIRMWARE_NAME:(.*);", str(name))
- if new_name:
+ if new_name:
self._firmware_name = new_name[0]
Logger.log("i", "USB output device Firmware name: %s", self._firmware_name)
else:
diff --git a/plugins/USBPrinting/plugin.json b/plugins/USBPrinting/plugin.json
index 45971d858b..c05ea65f2d 100644
--- a/plugins/USBPrinting/plugin.json
+++ b/plugins/USBPrinting/plugin.json
@@ -2,7 +2,7 @@
"name": "USB printing",
"author": "Ultimaker B.V.",
"version": "1.0.2",
- "api": "6.0",
+ "api": "7.0",
"description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.",
"i18n-catalog": "cura"
}
diff --git a/plugins/UltimakerMachineActions/UM2UpgradeSelection.py b/plugins/UltimakerMachineActions/UM2UpgradeSelection.py
deleted file mode 100644
index 999cb1d35a..0000000000
--- a/plugins/UltimakerMachineActions/UM2UpgradeSelection.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# Copyright (c) 2018 Ultimaker B.V.
-# Uranium is released under the terms of the LGPLv3 or higher.
-
-from PyQt5.QtCore import pyqtSignal, pyqtProperty
-
-from UM.Settings.ContainerRegistry import ContainerRegistry
-from UM.i18n import i18nCatalog
-from UM.Application import Application
-from UM.Util import parseBool
-
-from cura.MachineAction import MachineAction
-
-catalog = i18nCatalog("cura")
-
-
-## The Ultimaker 2 can have a few revisions & upgrades.
-class UM2UpgradeSelection(MachineAction):
- def __init__(self):
- super().__init__("UM2UpgradeSelection", catalog.i18nc("@action", "Select upgrades"))
- self._qml_url = "UM2UpgradeSelectionMachineAction.qml"
-
- self._container_registry = ContainerRegistry.getInstance()
-
- self._current_global_stack = None
-
- Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged)
- self._reset()
-
- def _reset(self):
- self.hasVariantsChanged.emit()
-
- def _onGlobalStackChanged(self):
- if self._current_global_stack:
- self._current_global_stack.metaDataChanged.disconnect(self._onGlobalStackMetaDataChanged)
-
- self._current_global_stack = Application.getInstance().getGlobalContainerStack()
- if self._current_global_stack:
- self._current_global_stack.metaDataChanged.connect(self._onGlobalStackMetaDataChanged)
- self._reset()
-
- def _onGlobalStackMetaDataChanged(self):
- self._reset()
-
- hasVariantsChanged = pyqtSignal()
-
- def setHasVariants(self, has_variants = True):
- global_container_stack = Application.getInstance().getGlobalContainerStack()
- if global_container_stack:
- variant_container = global_container_stack.extruders["0"].variant
-
- if has_variants:
- global_container_stack.setMetaDataEntry("has_variants", True)
-
- # Set the variant container to a sane default
- empty_container = ContainerRegistry.getInstance().getEmptyInstanceContainer()
- if type(variant_container) == type(empty_container):
- search_criteria = { "type": "variant", "definition": "ultimaker2", "id": "*0.4*" }
- containers = self._container_registry.findInstanceContainers(**search_criteria)
- if containers:
- global_container_stack.extruders["0"].variant = containers[0]
- else:
- # The metadata entry is stored in an ini, and ini files are parsed as strings only.
- # Because any non-empty string evaluates to a boolean True, we have to remove the entry to make it False.
- if "has_variants" in global_container_stack.getMetaData():
- global_container_stack.removeMetaDataEntry("has_variants")
-
- # Set the variant container to an empty variant
- global_container_stack.extruders["0"].variant = ContainerRegistry.getInstance().getEmptyInstanceContainer()
-
- Application.getInstance().globalContainerStackChanged.emit()
- self._reset()
-
- @pyqtProperty(bool, fset = setHasVariants, notify = hasVariantsChanged)
- def hasVariants(self):
- if self._current_global_stack:
- return parseBool(self._current_global_stack.getMetaDataEntry("has_variants", "false"))
diff --git a/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml b/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml
deleted file mode 100644
index 13525f6eb3..0000000000
--- a/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2019 Ultimaker B.V.
-// Cura is released under the terms of the LGPLv3 or higher.
-
-import QtQuick 2.10
-import QtQuick.Controls 2.3
-
-import UM 1.3 as UM
-import Cura 1.1 as Cura
-
-
-Cura.MachineAction
-{
- UM.I18nCatalog { id: catalog; name: "cura"; }
- anchors.fill: parent
-
- Item
- {
- id: upgradeSelectionMachineAction
- anchors.fill: parent
- anchors.topMargin: UM.Theme.getSize("default_margin").width * 5
- anchors.leftMargin: UM.Theme.getSize("default_margin").width * 4
-
- Label
- {
- id: pageDescription
- anchors.top: parent.top
- anchors.topMargin: UM.Theme.getSize("default_margin").height
- width: parent.width
- wrapMode: Text.WordWrap
- text: catalog.i18nc("@label", "Please select any upgrades made to this Ultimaker 2.")
- font: UM.Theme.getFont("medium")
- color: UM.Theme.getColor("text")
- renderType: Text.NativeRendering
- }
-
- Cura.CheckBox
- {
- id: olssonBlockCheckBox
- anchors.top: pageDescription.bottom
- anchors.topMargin: UM.Theme.getSize("default_margin").height
-
- height: UM.Theme.getSize("setting_control").height
-
- text: catalog.i18nc("@label", "Olsson Block")
- checked: manager.hasVariants
- onClicked: manager.hasVariants = checked
-
- Connections
- {
- target: manager
- onHasVariantsChanged: olssonBlockCheckBox.checked = manager.hasVariants
- }
- }
- }
-}
diff --git a/plugins/UltimakerMachineActions/__init__.py b/plugins/UltimakerMachineActions/__init__.py
index e87949580a..aecb3b0ad6 100644
--- a/plugins/UltimakerMachineActions/__init__.py
+++ b/plugins/UltimakerMachineActions/__init__.py
@@ -1,9 +1,8 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from . import BedLevelMachineAction
from . import UMOUpgradeSelection
-from . import UM2UpgradeSelection
def getMetaData():
return {}
@@ -11,6 +10,5 @@ def getMetaData():
def register(app):
return { "machine_action": [
BedLevelMachineAction.BedLevelMachineAction(),
- UMOUpgradeSelection.UMOUpgradeSelection(),
- UM2UpgradeSelection.UM2UpgradeSelection()
+ UMOUpgradeSelection.UMOUpgradeSelection()
]}
diff --git a/plugins/UltimakerMachineActions/plugin.json b/plugins/UltimakerMachineActions/plugin.json
index 3e3e0af9b0..e33d77c154 100644
--- a/plugins/UltimakerMachineActions/plugin.json
+++ b/plugins/UltimakerMachineActions/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py
index af9635d384..8419b3beeb 100644
--- a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py
+++ b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py
@@ -6,7 +6,7 @@ import io #To write config files to strings as if they were files.
from typing import Dict, List, Optional, Tuple
import UM.VersionUpgrade
-from UM.Logger import Logger
+
## Creates a new profile instance by parsing a serialised profile in version 1
# of the file format.
@@ -20,6 +20,7 @@ def importFrom(serialised: str, filename: str) -> Optional["Profile"]:
except (configparser.Error, UM.VersionUpgrade.FormatException, UM.VersionUpgrade.InvalidVersionException):
return None
+
## A representation of a profile used as intermediary form for conversion from
# one format to the other.
class Profile:
diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json b/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json
index cad94c2eb5..547c1f9f4e 100644
--- a/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Upgrades configurations from Cura 2.1 to Cura 2.2.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json b/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json
index 7da1e7a56d..51e3cd6794 100644
--- a/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Upgrades configurations from Cura 2.2 to Cura 2.4.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json b/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json
index e1f0a47685..4a2c04ad8e 100644
--- a/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Upgrades configurations from Cura 2.5 to Cura 2.6.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json b/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json
index 6cdbd64cbb..a72c5210f9 100644
--- a/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Upgrades configurations from Cura 2.6 to Cura 2.7.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json
index 885d741a8c..787d03fdf3 100644
--- a/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Upgrades configurations from Cura 2.7 to Cura 3.0.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json b/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json
index d5f22649c1..7303d576cc 100644
--- a/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Upgrades configurations from Cura 3.0 to Cura 3.1.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json b/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json
index eb489169e0..a6f8f743e6 100644
--- a/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Upgrades configurations from Cura 3.2 to Cura 3.3.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json b/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json
index 9649010643..4f8c7b0a94 100644
--- a/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Upgrades configurations from Cura 3.3 to Cura 3.4.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json b/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json
index 71b13ee5a9..bdcb6598d1 100644
--- a/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Upgrades configurations from Cura 3.4 to Cura 3.5.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade35to40/plugin.json b/plugins/VersionUpgrade/VersionUpgrade35to40/plugin.json
index 578594fb6d..68259c1b9c 100644
--- a/plugins/VersionUpgrade/VersionUpgrade35to40/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade35to40/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Upgrades configurations from Cura 3.5 to Cura 4.0.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade40to41/plugin.json b/plugins/VersionUpgrade/VersionUpgrade40to41/plugin.json
index b1c6d75669..67474508ec 100644
--- a/plugins/VersionUpgrade/VersionUpgrade40to41/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade40to41/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Upgrades configurations from Cura 4.0 to Cura 4.1.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py b/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py
index a5a77a91e0..305cce16c6 100644
--- a/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py
+++ b/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py
@@ -239,7 +239,7 @@ class VersionUpgrade41to42(VersionUpgrade):
#
# This renames the renamed settings in the containers.
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
- parser = configparser.ConfigParser(interpolation = None)
+ parser = configparser.ConfigParser(interpolation = None, comment_prefixes=())
parser.read_string(serialized)
# Update version number.
@@ -325,7 +325,9 @@ class VersionUpgrade41to42(VersionUpgrade):
material_id = parser["containers"]["3"]
old_quality_id = parser["containers"]["2"]
if material_id in _creality_quality_per_material and old_quality_id in _creality_quality_per_material[material_id]:
- parser["containers"]["2"] = _creality_quality_per_material[material_id][old_quality_id]
+ if definition_id == "creality_cr10_extruder_0": # We can't disambiguate between Creality CR-10 and Creality-CR10S since they share the same extruder definition. Have to go by the name.
+ if "cr-10s" in parser["metadata"].get("machine", "Creality CR-10").lower(): # Not perfect, since the user can change this name :(
+ parser["containers"]["2"] = _creality_quality_per_material[material_id][old_quality_id]
stack_copy = {} # type: Dict[str, str] # Make a copy so that we don't modify the dict we're iterating over.
stack_copy.update(parser["containers"])
diff --git a/plugins/VersionUpgrade/VersionUpgrade41to42/__init__.py b/plugins/VersionUpgrade/VersionUpgrade41to42/__init__.py
index 6fd1309747..8fe718ca83 100644
--- a/plugins/VersionUpgrade/VersionUpgrade41to42/__init__.py
+++ b/plugins/VersionUpgrade/VersionUpgrade41to42/__init__.py
@@ -56,4 +56,4 @@ def getMetaData() -> Dict[str, Any]:
def register(app: "Application") -> Dict[str, Any]:
- return { "version_upgrade": upgrade }
\ No newline at end of file
+ return { "version_upgrade": upgrade }
diff --git a/plugins/VersionUpgrade/VersionUpgrade41to42/plugin.json b/plugins/VersionUpgrade/VersionUpgrade41to42/plugin.json
index 9f8edea286..506000aae9 100644
--- a/plugins/VersionUpgrade/VersionUpgrade41to42/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade41to42/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Upgrades configurations from Cura 4.1 to Cura 4.2.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade42to43/VersionUpgrade42to43.py b/plugins/VersionUpgrade/VersionUpgrade42to43/VersionUpgrade42to43.py
index c15f1e0468..d6489f6d8b 100644
--- a/plugins/VersionUpgrade/VersionUpgrade42to43/VersionUpgrade42to43.py
+++ b/plugins/VersionUpgrade/VersionUpgrade42to43/VersionUpgrade42to43.py
@@ -104,7 +104,7 @@ class VersionUpgrade42to43(VersionUpgrade):
#
# This renames the renamed settings in the containers.
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
- parser = configparser.ConfigParser(interpolation = None)
+ parser = configparser.ConfigParser(interpolation = None, comment_prefixes=())
parser.read_string(serialized)
# Update version number.
diff --git a/plugins/VersionUpgrade/VersionUpgrade42to43/plugin.json b/plugins/VersionUpgrade/VersionUpgrade42to43/plugin.json
index 339ec67ee7..8a5e838668 100644
--- a/plugins/VersionUpgrade/VersionUpgrade42to43/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade42to43/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Upgrades configurations from Cura 4.2 to Cura 4.3.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py b/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py
index 8d79493bc6..8b69852cb2 100644
--- a/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py
+++ b/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py
@@ -2,8 +2,17 @@ import configparser
from typing import Tuple, List
import io
from UM.VersionUpgrade import VersionUpgrade
+from UM.Util import parseBool # To parse whether the Alternate Skin Rotations function is activated.
_renamed_container_id_map = {
+ "ultimaker2_0.25": "ultimaker2_olsson_0.25",
+ "ultimaker2_0.4": "ultimaker2_olsson_0.4",
+ "ultimaker2_0.6": "ultimaker2_olsson_0.6",
+ "ultimaker2_0.8": "ultimaker2_olsson_0.8",
+ "ultimaker2_extended_0.25": "ultimaker2_extended_olsson_0.25",
+ "ultimaker2_extended_0.4": "ultimaker2_extended_olsson_0.4",
+ "ultimaker2_extended_0.6": "ultimaker2_extended_olsson_0.6",
+ "ultimaker2_extended_0.8": "ultimaker2_extended_olsson_0.8",
# HMS434 "extra coarse", "super coarse", and "ultra coarse" are removed.
"hms434_global_Extra_Coarse_Quality": "hms434_global_Normal_Quality",
"hms434_global_Super_Coarse_Quality": "hms434_global_Normal_Quality",
@@ -43,12 +52,28 @@ class VersionUpgrade43to44(VersionUpgrade):
#
# This renames the renamed settings in the containers.
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
- parser = configparser.ConfigParser(interpolation = None)
+ parser = configparser.ConfigParser(interpolation = None, comment_prefixes=())
parser.read_string(serialized)
# Update version number.
parser["metadata"]["setting_version"] = "10"
+ # Intent profiles were added, so the quality changes should match with no intent (so "default")
+ if parser["metadata"].get("type", "") == "quality_changes":
+ parser["metadata"]["intent_category"] = "default"
+
+ if "values" in parser:
+ # 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)
return [filename], [result.getvalue()]
@@ -64,6 +89,29 @@ class VersionUpgrade43to44(VersionUpgrade):
parser["metadata"]["setting_version"] = "10"
if "containers" in parser:
+ # With the ContainerTree refactor, UM2 with Olsson block got moved to a separate definition.
+ if "6" in parser["containers"]:
+ if parser["containers"]["6"] == "ultimaker2":
+ if "metadata" in parser and "has_variants" in parser["metadata"] and parser["metadata"]["has_variants"] == "True": # This is an Olsson block upgraded UM2!
+ parser["containers"]["6"] = "ultimaker2_olsson"
+ del parser["metadata"]["has_variants"]
+ elif parser["containers"]["6"] == "ultimaker2_extended":
+ if "metadata" in parser and "has_variants" in parser["metadata"] and parser["metadata"]["has_variants"] == "True": # This is an Olsson block upgraded UM2E!
+ parser["containers"]["6"] = "ultimaker2_extended_olsson"
+ del parser["metadata"]["has_variants"]
+
+ # We should only have 6 levels when we start.
+ if "7" in parser["containers"]:
+ return ([], [])
+
+ # We added the intent container in Cura 4.4. This means that all other containers move one step down.
+ parser["containers"]["7"] = parser["containers"]["6"]
+ parser["containers"]["6"] = parser["containers"]["5"]
+ parser["containers"]["5"] = parser["containers"]["4"]
+ parser["containers"]["4"] = parser["containers"]["3"]
+ parser["containers"]["3"] = parser["containers"]["2"]
+ parser["containers"]["2"] = "empty_intent"
+
# Update renamed containers
for key, value in parser["containers"].items():
if value in _renamed_container_id_map:
diff --git a/plugins/VersionUpgrade/VersionUpgrade43to44/plugin.json b/plugins/VersionUpgrade/VersionUpgrade43to44/plugin.json
index 355f2f58db..37575396e3 100644
--- a/plugins/VersionUpgrade/VersionUpgrade43to44/plugin.json
+++ b/plugins/VersionUpgrade/VersionUpgrade43to44/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Upgrades configurations from Cura 4.3 to Cura 4.4.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/VersionUpgrade/VersionUpgrade43to44/tests/TestVersionUpgrade43To44.py b/plugins/VersionUpgrade/VersionUpgrade43to44/tests/TestVersionUpgrade43To44.py
new file mode 100644
index 0000000000..dc770c2c6f
--- /dev/null
+++ b/plugins/VersionUpgrade/VersionUpgrade43to44/tests/TestVersionUpgrade43To44.py
@@ -0,0 +1,36 @@
+import configparser
+
+import VersionUpgrade43to44
+
+before_update = """[general]
+version = 4
+name = Ultimaker 3
+id = Ultimaker 3
+
+[metadata]
+type = machine
+
+[containers]
+0 = user_profile
+1 = quality_changes
+2 = quality
+3 = material
+4 = variant
+5 = definition_changes
+6 = definition
+"""
+
+
+def test_upgrade():
+ upgrader = VersionUpgrade43to44.VersionUpgrade43to44()
+ file_name, new_data = upgrader.upgradeStack(before_update, "whatever")
+ parser = configparser.ConfigParser(interpolation=None)
+ parser.read_string(new_data[0])
+ assert parser["containers"]["0"] == "user_profile"
+ assert parser["containers"]["1"] == "quality_changes"
+ assert parser["containers"]["2"] == "empty_intent"
+ assert parser["containers"]["3"] == "quality"
+ assert parser["containers"]["4"] == "material"
+ assert parser["containers"]["5"] == "variant"
+ assert parser["containers"]["6"] == "definition_changes"
+ assert parser["containers"]["7"] == "definition"
\ No newline at end of file
diff --git a/plugins/VersionUpgrade/VersionUpgrade44to45/VersionUpgrade44to45.py b/plugins/VersionUpgrade/VersionUpgrade44to45/VersionUpgrade44to45.py
new file mode 100644
index 0000000000..1d278764f0
--- /dev/null
+++ b/plugins/VersionUpgrade/VersionUpgrade44to45/VersionUpgrade44to45.py
@@ -0,0 +1,69 @@
+import configparser
+from typing import Tuple, List
+import io
+from UM.VersionUpgrade import VersionUpgrade
+
+# Merged preferences: machine_head_polygon and machine_head_with_fans_polygon -> machine_head_with_fans_polygon
+# When both are present, machine_head_polygon will be removed
+# When only one of the two is present, it's value will be used
+
+
+class VersionUpgrade44to45(VersionUpgrade):
+ def getCfgVersion(self, serialised: str) -> int:
+ parser = configparser.ConfigParser(interpolation = None)
+ parser.read_string(serialised)
+ format_version = int(parser.get("general", "version")) # Explicitly give an exception when this fails. That means that the file format is not recognised.
+ setting_version = int(parser.get("metadata", "setting_version", fallback = "0"))
+ return format_version * 1000000 + setting_version
+
+ ## Upgrades Preferences to have the new version number.
+ #
+ # This renames the renamed settings in the list of visible settings.
+ def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
+ parser = configparser.ConfigParser(interpolation = None)
+ parser.read_string(serialized)
+
+ # Update version number.
+ parser["metadata"]["setting_version"] = "11"
+
+ result = io.StringIO()
+ parser.write(result)
+ return [filename], [result.getvalue()]
+
+ ## Upgrades instance containers to have the new version
+ # number.
+ #
+ # This renames the renamed settings in the containers.
+ def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
+ parser = configparser.ConfigParser(interpolation = None, comment_prefixes=())
+ parser.read_string(serialized)
+
+ # Update version number.
+ parser["metadata"]["setting_version"] = "11"
+
+ if "values" in parser:
+ # merge machine_head_with_fans_polygon (preferred) and machine_head_polygon
+ if "machine_head_with_fans_polygon" in parser["values"]:
+ if "machine_head_polygon" in parser["values"]:
+ del parser["values"]["machine_head_polygon"]
+ elif "machine_head_polygon" in parser["values"]:
+ parser["values"]["machine_head_with_fans_polygon"] = parser["values"]["machine_head_polygon"]
+ del parser["values"]["machine_head_polygon"]
+
+ result = io.StringIO()
+ parser.write(result)
+ return [filename], [result.getvalue()]
+
+ ## Upgrades stacks to have the new version number.
+ def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
+ parser = configparser.ConfigParser(interpolation = None)
+ parser.read_string(serialized)
+
+ # Update version number.
+ if "metadata" not in parser:
+ parser["metadata"] = {}
+ parser["metadata"]["setting_version"] = "11"
+
+ result = io.StringIO()
+ parser.write(result)
+ return [filename], [result.getvalue()]
diff --git a/plugins/VersionUpgrade/VersionUpgrade44to45/__init__.py b/plugins/VersionUpgrade/VersionUpgrade44to45/__init__.py
new file mode 100644
index 0000000000..06a9d66c50
--- /dev/null
+++ b/plugins/VersionUpgrade/VersionUpgrade44to45/__init__.py
@@ -0,0 +1,61 @@
+# Copyright (c) 2019 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from typing import Any, Dict, TYPE_CHECKING
+
+from . import VersionUpgrade44to45
+
+
+if TYPE_CHECKING:
+ from UM.Application import Application
+
+upgrade = VersionUpgrade44to45.VersionUpgrade44to45()
+
+
+def getMetaData() -> Dict[str, Any]:
+ return {
+ "version_upgrade": {
+ # From To Upgrade function
+ ("preferences", 6000010): ("preferences", 6000011, upgrade.upgradePreferences),
+ ("machine_stack", 4000010): ("machine_stack", 4000011, upgrade.upgradeStack),
+ ("extruder_train", 4000010): ("extruder_train", 4000011, upgrade.upgradeStack),
+ ("definition_changes", 4000010): ("definition_changes", 4000011, upgrade.upgradeInstanceContainer),
+ ("quality_changes", 4000010): ("quality_changes", 4000011, upgrade.upgradeInstanceContainer),
+ ("quality", 4000010): ("quality", 4000011, upgrade.upgradeInstanceContainer),
+ ("user", 4000010): ("user", 4000011, upgrade.upgradeInstanceContainer),
+ },
+ "sources": {
+ "preferences": {
+ "get_version": upgrade.getCfgVersion,
+ "location": {"."}
+ },
+ "machine_stack": {
+ "get_version": upgrade.getCfgVersion,
+ "location": {"./machine_instances"}
+ },
+ "extruder_train": {
+ "get_version": upgrade.getCfgVersion,
+ "location": {"./extruders"}
+ },
+ "definition_changes": {
+ "get_version": upgrade.getCfgVersion,
+ "location": {"./definition_changes"}
+ },
+ "quality_changes": {
+ "get_version": upgrade.getCfgVersion,
+ "location": {"./quality_changes"}
+ },
+ "quality": {
+ "get_version": upgrade.getCfgVersion,
+ "location": {"./quality"}
+ },
+ "user": {
+ "get_version": upgrade.getCfgVersion,
+ "location": {"./user"}
+ }
+ }
+ }
+
+
+def register(app: "Application") -> Dict[str, Any]:
+ return {"version_upgrade": upgrade}
diff --git a/plugins/VersionUpgrade/VersionUpgrade44to45/plugin.json b/plugins/VersionUpgrade/VersionUpgrade44to45/plugin.json
new file mode 100644
index 0000000000..f7b6157118
--- /dev/null
+++ b/plugins/VersionUpgrade/VersionUpgrade44to45/plugin.json
@@ -0,0 +1,8 @@
+{
+ "name": "Version Upgrade 4.4 to 4.5",
+ "author": "Ultimaker B.V.",
+ "version": "1.0.0",
+ "description": "Upgrades configurations from Cura 4.4 to Cura 4.5.",
+ "api": "7.0",
+ "i18n-catalog": "cura"
+}
diff --git a/plugins/VersionUpgrade/VersionUpgrade44to45/tests/TestVersionUpgrade44To45.py b/plugins/VersionUpgrade/VersionUpgrade44to45/tests/TestVersionUpgrade44To45.py
new file mode 100644
index 0000000000..0c1bb55985
--- /dev/null
+++ b/plugins/VersionUpgrade/VersionUpgrade44to45/tests/TestVersionUpgrade44To45.py
@@ -0,0 +1,42 @@
+import configparser
+
+import VersionUpgrade44to45
+import pytest
+
+before_update = """[general]
+version = 4
+name = Creality CR-10S_settings
+definition = creality_cr10s
+
+[metadata]
+type = definition_changes
+setting_version = 11
+
+[values]
+%s
+"""
+before_after_list = [
+ ("machine_head_with_fans_polygon = [[-99, 99], [-99, -44], [45, 99], [45, -44]]", "[[-99, 99], [-99, -44], [45, 99], [45, -44]]"),
+ ("", None),
+ ("machine_head_polygon = [[-98, 99], [-99, -44], [45, 99], [45, -44]]", "[[-98, 99], [-99, -44], [45, 99], [45, -44]]"),
+ ("machine_head_polygon = [[-87, 99], [-99, -44], [45, 99], [45, -44]]\nmachine_head_with_fans_polygon = [[-99, 99], [-99, -44], [45, 99], [45, -44]]", "[[-99, 99], [-99, -44], [45, 99], [45, -44]]"),
+ ]
+
+
+class TestVersionUpgrade44to45:
+
+ @pytest.mark.parametrize("after_string, after_value", before_after_list)
+ def test_upgrade(self, after_string, after_value):
+ upgrader = VersionUpgrade44to45.VersionUpgrade44to45()
+
+
+ file_name, new_data = upgrader.upgradeInstanceContainer(before_update % after_string, "whatever")
+ parser = configparser.ConfigParser(interpolation=None)
+ parser.read_string(new_data[0])
+
+ if after_value is None:
+ assert "machine_head_with_fans_polygon" not in parser["values"]
+ else:
+ assert parser["values"]["machine_head_with_fans_polygon"] == after_value
+
+ assert "machine_head_polygon" not in parser["values"]
\ No newline at end of file
diff --git a/plugins/X3DReader/plugin.json b/plugins/X3DReader/plugin.json
index 1fc14104ed..17bb3a96d1 100644
--- a/plugins/X3DReader/plugin.json
+++ b/plugins/X3DReader/plugin.json
@@ -3,6 +3,6 @@
"author": "Seva Alekseyev",
"version": "1.0.1",
"description": "Provides support for reading X3D files.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/XRayView/plugin.json b/plugins/XRayView/plugin.json
index 71cc165b6c..ff220ed97c 100644
--- a/plugins/XRayView/plugin.json
+++ b/plugins/XRayView/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides the X-Ray view.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py
index 04ed112aa1..52b204affc 100644
--- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py
+++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py
@@ -17,6 +17,7 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
from cura.CuraApplication import CuraApplication
+from cura.Machines.ContainerTree import ContainerTree
from cura.Machines.VariantType import VariantType
try:
@@ -74,36 +75,20 @@ class XmlMaterialProfile(InstanceContainer):
if k in self.__material_properties_setting_map:
new_setting_values_dict[self.__material_properties_setting_map[k]] = v
- # Prevent recursion
- if not apply_to_all:
- super().setMetaDataEntry(key, value)
+ if not apply_to_all: # Historical: If you only want to modify THIS container. We only used that to prevent recursion but with the below code that's no longer necessary.
+ # CURA-6920: This is an optimization, but it also fixes the problem that you can only set metadata for a
+ # material container that can be found in the container registry.
+ container_query = [self]
+ else:
+ container_query = registry.findContainers(base_file = self.getMetaDataEntry("base_file"))
+
+ for container in container_query:
+ if key not in container.getMetaData() or container.getMetaData()[key] != value:
+ container.getMetaData()[key] = value
+ container.setDirty(True)
+ container.metaDataChanged.emit(container)
for k, v in new_setting_values_dict.items():
self.setProperty(k, "value", v)
- return
-
- # Get the MaterialGroup
- material_manager = CuraApplication.getInstance().getMaterialManager()
- root_material_id = self.getMetaDataEntry("base_file") #if basefile is self.getId, this is a basefile.
- material_group = material_manager.getMaterialGroup(root_material_id)
- if not material_group: #If the profile is not registered in the registry but loose/temporary, it will not have a base file tree.
- super().setMetaDataEntry(key, value)
- for k, v in new_setting_values_dict.items():
- self.setProperty(k, "value", v)
- return
- # Update the root material container
- root_material_container = material_group.root_material_node.getContainer()
- if root_material_container is not None:
- root_material_container.setMetaDataEntry(key, value, apply_to_all = False)
- for k, v in new_setting_values_dict.items():
- root_material_container.setProperty(k, "value", v)
-
- # Update all containers derived from it
- for node in material_group.derived_material_node_list:
- container = node.getContainer()
- if container is not None:
- container.setMetaDataEntry(key, value, apply_to_all = False)
- for k, v in new_setting_values_dict.items():
- container.setProperty(k, "value", v)
## Overridden from InstanceContainer, similar to setMetaDataEntry.
# without this function the setName would only set the name of the specific nozzle / material / machine combination container
@@ -225,10 +210,8 @@ class XmlMaterialProfile(InstanceContainer):
for instance in self.findInstances():
self._addSettingElement(builder, instance)
- machine_container_map = {} # type: Dict[str, InstanceContainer]
- machine_variant_map = {} # type: Dict[str, Dict[str, Any]]
-
- variant_manager = CuraApplication.getInstance().getVariantManager()
+ machine_container_map = {} # type: Dict[str, InstanceContainer]
+ machine_variant_map = {} # type: Dict[str, Dict[str, Any]]
root_material_id = self.getMetaDataEntry("base_file") # if basefile is self.getId, this is a basefile.
all_containers = registry.findInstanceContainers(base_file = root_material_id)
@@ -245,13 +228,13 @@ class XmlMaterialProfile(InstanceContainer):
machine_variant_map[definition_id] = {}
variant_name = container.getMetaDataEntry("variant_name")
- if variant_name:
- variant_dict = {"variant_node": variant_manager.getVariantNode(definition_id, variant_name),
- "material_container": container}
- machine_variant_map[definition_id][variant_name] = variant_dict
+ if not variant_name:
+ machine_container_map[definition_id] = container
continue
- machine_container_map[definition_id] = container
+ variant_dict = {"variant_type": container.getMetaDataEntry("hardware_type", "nozzle"),
+ "material_container": container}
+ machine_variant_map[definition_id][variant_name] = variant_dict
# Map machine human-readable names to IDs
product_id_map = self.getProductIdMap()
@@ -284,8 +267,7 @@ class XmlMaterialProfile(InstanceContainer):
# Find all hotend sub-profiles corresponding to this material and machine and add them to this profile.
buildplate_dict = {} # type: Dict[str, Any]
for variant_name, variant_dict in machine_variant_map[definition_id].items():
- variant_type = variant_dict["variant_node"].getMetaDataEntry("hardware_type", str(VariantType.NOZZLE))
- variant_type = VariantType(variant_type)
+ variant_type = VariantType(variant_dict["variant_type"])
if variant_type == VariantType.NOZZLE:
# The hotend identifier is not the containers name, but its "name".
builder.start("hotend", {"id": variant_name})
@@ -348,7 +330,7 @@ class XmlMaterialProfile(InstanceContainer):
stream = io.BytesIO()
tree = ET.ElementTree(root)
# this makes sure that the XML header states encoding="utf-8"
- tree.write(stream, encoding = "utf-8", xml_declaration=True)
+ tree.write(stream, encoding = "utf-8", xml_declaration = True)
return stream.getvalue().decode("utf-8")
@@ -699,32 +681,6 @@ class XmlMaterialProfile(InstanceContainer):
if is_new_material:
containers_to_add.append(new_material)
- # Find the buildplates compatibility
- buildplates = machine.iterfind("./um:buildplate", self.__namespaces)
- buildplate_map = {}
- buildplate_map["buildplate_compatible"] = {}
- buildplate_map["buildplate_recommended"] = {}
- for buildplate in buildplates:
- buildplate_id = buildplate.get("id")
- if buildplate_id is None:
- continue
-
- variant_manager = CuraApplication.getInstance().getVariantManager()
- variant_node = variant_manager.getVariantNode(machine_id, buildplate_id,
- variant_type = VariantType.BUILD_PLATE)
- if not variant_node:
- continue
-
- _, buildplate_unmapped_settings_dict = self._getSettingsDictForNode(buildplate)
-
- buildplate_compatibility = buildplate_unmapped_settings_dict.get("hardware compatible",
- machine_compatibility)
- buildplate_recommended = buildplate_unmapped_settings_dict.get("hardware recommended",
- machine_compatibility)
-
- buildplate_map["buildplate_compatible"][buildplate_id] = buildplate_compatibility
- buildplate_map["buildplate_recommended"][buildplate_id] = buildplate_recommended
-
hotends = machine.iterfind("./um:hotend", self.__namespaces)
for hotend in hotends:
# The "id" field for hotends in material profiles is actually name
@@ -732,11 +688,6 @@ class XmlMaterialProfile(InstanceContainer):
if hotend_name is None:
continue
- variant_manager = CuraApplication.getInstance().getVariantManager()
- variant_node = variant_manager.getVariantNode(machine_id, hotend_name, VariantType.NOZZLE)
- if not variant_node:
- continue
-
hotend_mapped_settings, hotend_unmapped_settings = self._getSettingsDictForNode(hotend)
hotend_compatibility = hotend_unmapped_settings.get("hardware compatible", machine_compatibility)
@@ -760,9 +711,6 @@ class XmlMaterialProfile(InstanceContainer):
new_hotend_material.getMetaData()["compatible"] = hotend_compatibility
new_hotend_material.getMetaData()["machine_manufacturer"] = machine_manufacturer
new_hotend_material.getMetaData()["definition"] = machine_id
- if buildplate_map["buildplate_compatible"]:
- new_hotend_material.getMetaData()["buildplate_compatible"] = buildplate_map["buildplate_compatible"]
- new_hotend_material.getMetaData()["buildplate_recommended"] = buildplate_map["buildplate_recommended"]
cached_hotend_setting_properties = cached_machine_setting_properties.copy()
cached_hotend_setting_properties.update(hotend_mapped_settings)
@@ -772,63 +720,10 @@ class XmlMaterialProfile(InstanceContainer):
new_hotend_material._dirty = False
if is_new_material:
+ if ContainerRegistry.getInstance().isReadOnly(self.getId()):
+ ContainerRegistry.getInstance().setExplicitReadOnly(new_hotend_material.getId())
containers_to_add.append(new_hotend_material)
- #
- # Build plates in hotend
- #
- buildplates = hotend.iterfind("./um:buildplate", self.__namespaces)
- for buildplate in buildplates:
- # The "id" field for buildplate in material profiles is actually name
- buildplate_name = buildplate.get("id")
- if buildplate_name is None:
- continue
-
- variant_manager = CuraApplication.getInstance().getVariantManager()
- variant_node = variant_manager.getVariantNode(machine_id, buildplate_name, VariantType.BUILD_PLATE)
- if not variant_node:
- continue
-
- buildplate_mapped_settings, buildplate_unmapped_settings = self._getSettingsDictForNode(buildplate)
- buildplate_compatibility = buildplate_unmapped_settings.get("hardware compatible",
- buildplate_map["buildplate_compatible"])
- buildplate_recommended = buildplate_unmapped_settings.get("hardware recommended",
- buildplate_map["buildplate_recommended"])
-
- # Generate container ID for the hotend-and-buildplate-specific material container
- new_hotend_and_buildplate_specific_material_id = new_hotend_specific_material_id + "_" + buildplate_name.replace(" ", "_")
-
- # Same as machine compatibility, keep the derived material containers consistent with the parent material
- if ContainerRegistry.getInstance().isLoaded(new_hotend_and_buildplate_specific_material_id):
- new_hotend_and_buildplate_material = ContainerRegistry.getInstance().findContainers(id = new_hotend_and_buildplate_specific_material_id)[0]
- is_new_material = False
- else:
- new_hotend_and_buildplate_material = XmlMaterialProfile(new_hotend_and_buildplate_specific_material_id)
- is_new_material = True
-
- new_hotend_and_buildplate_material.setMetaData(copy.deepcopy(new_hotend_material.getMetaData()))
- new_hotend_and_buildplate_material.getMetaData()["id"] = new_hotend_and_buildplate_specific_material_id
- new_hotend_and_buildplate_material.getMetaData()["name"] = self.getName()
- new_hotend_and_buildplate_material.getMetaData()["variant_name"] = hotend_name
- new_hotend_and_buildplate_material.getMetaData()["buildplate_name"] = buildplate_name
- new_hotend_and_buildplate_material.setDefinition(machine_id)
- # Don't use setMetadata, as that overrides it for all materials with same base file
- new_hotend_and_buildplate_material.getMetaData()["compatible"] = buildplate_compatibility
- new_hotend_and_buildplate_material.getMetaData()["machine_manufacturer"] = machine_manufacturer
- new_hotend_and_buildplate_material.getMetaData()["definition"] = machine_id
- new_hotend_and_buildplate_material.getMetaData()["buildplate_compatible"] = buildplate_compatibility
- new_hotend_and_buildplate_material.getMetaData()["buildplate_recommended"] = buildplate_recommended
-
- cached_hotend_and_buildplate_setting_properties = cached_hotend_setting_properties.copy()
- cached_hotend_and_buildplate_setting_properties.update(buildplate_mapped_settings)
-
- new_hotend_and_buildplate_material.setCachedValues(cached_hotend_and_buildplate_setting_properties)
-
- new_hotend_and_buildplate_material._dirty = False
-
- if is_new_material:
- containers_to_add.append(new_hotend_and_buildplate_material)
-
# there is only one ID for a machine. Once we have reached here, it means we have already found
# a workable ID for that machine, so there is no need to continue
break
@@ -1209,6 +1104,7 @@ class XmlMaterialProfile(InstanceContainer):
"anti ooze retract speed": "material_anti_ooze_retraction_speed",
"break preparation position": "material_break_preparation_retracted_position",
"break preparation speed": "material_break_preparation_speed",
+ "break preparation temperature": "material_break_preparation_temperature",
"break position": "material_break_retracted_position",
"break speed": "material_break_speed",
"break temperature": "material_break_temperature"
diff --git a/plugins/XmlMaterialProfile/plugin.json b/plugins/XmlMaterialProfile/plugin.json
index bb1db82fa4..a8f82d1058 100644
--- a/plugins/XmlMaterialProfile/plugin.json
+++ b/plugins/XmlMaterialProfile/plugin.json
@@ -3,6 +3,6 @@
"author": "Ultimaker B.V.",
"version": "1.0.1",
"description": "Provides capabilities to read and write XML-based material profiles.",
- "api": "6.0",
+ "api": "7.0",
"i18n-catalog": "cura"
}
diff --git a/public_key.pem b/public_key.pem
new file mode 100644
index 0000000000..d07bb5477a
--- /dev/null
+++ b/public_key.pem
@@ -0,0 +1,13 @@
+-----BEGIN RSA PUBLIC KEY-----
+MIICCgKCAgEA8k8IJsNNM097VM2pJ5vxkHcLhHf76JCB0iyvqpUuIgl8Zcp78Go+
+WtVkbVBZPPfSSB8GwjEtxvZeWj3i6e3nfreuuzq2sw6Gh860wMiQbNgL+rYCU3m9
+XxvC0kXgZt+oYs13N5LTePV7BG4goa/JOcN8dsu2ptZKfgH6TPhwshMeOGr/RoGr
+Jw1DrpvVeq/yTkrEHQHdtHr81GDghfK1vzxYQCt94MOFQCeShhtIC/jHelenJA94
+EpXqcWwCzFDfCQ3aXmCNHnMAsTHer7DWDfvsaUFyvJznrxkuQZIOQydGCNWhePTw
+nGiaMydchknr9TT3F+W/yuCs4u5GdZsz7S+1qbG4hblXo6dV6CTzkdKhh/MzONPC
+w6u1QBHUeTWN98zcTdtGIn53jjZEyYTodPnw/p4xLHVCju78a7uwm5U0rahcs6gw
+658glo3uT41mmTrXTBIVTV+4f/dSrwJVpNfTy/E4wi6fiuFeN8ojqXqN+NbIymfJ
+aKar/Jf/nM3QpEYaPz7yyn8PW8MZ7iomqnsPzyQGE1aymuEbw0ipTzMB7Oy/DfuU
+d4JU8FFuVuWJj3zNaXW7U/ggzbt5vkdIP/VNVfNZf741J/yKRbCI0+j4mthbruVQ
+Ka4aB2EVp1ozisHMaALg5tAeUgrQDZjGnVmSQLt+yFUUbG4e0XFQBb8CAwEAAQ==
+-----END RSA PUBLIC KEY-----
diff --git a/resources/bundled_packages/cura.json b/resources/bundled_packages/cura.json
index 2e561b6763..22642cd38e 100644
--- a/resources/bundled_packages/cura.json
+++ b/resources/bundled_packages/cura.json
@@ -6,7 +6,7 @@
"display_name": "3MF Reader",
"description": "Provides support for reading 3MF files.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -23,7 +23,7 @@
"display_name": "3MF Writer",
"description": "Provides support for writing 3MF files.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -40,7 +40,7 @@
"display_name": "AMF Reader",
"description": "Provides support for reading AMF files.",
"package_version": "1.0.0",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "fieldOfView",
@@ -57,7 +57,7 @@
"display_name": "Cura Backups",
"description": "Backup and restore your configuration.",
"package_version": "1.2.0",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -74,7 +74,7 @@
"display_name": "CuraEngine Backend",
"description": "Provides the link to the CuraEngine slicing backend.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -91,7 +91,7 @@
"display_name": "Cura Profile Reader",
"description": "Provides support for importing Cura profiles.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -108,7 +108,7 @@
"display_name": "Cura Profile Writer",
"description": "Provides support for exporting Cura profiles.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -125,7 +125,7 @@
"display_name": "Firmware Update Checker",
"description": "Checks for firmware updates.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -142,7 +142,7 @@
"display_name": "Firmware Updater",
"description": "Provides a machine actions for updating firmware.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -159,7 +159,7 @@
"display_name": "Compressed G-code Reader",
"description": "Reads g-code from a compressed archive.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -176,7 +176,7 @@
"display_name": "Compressed G-code Writer",
"description": "Writes g-code to a compressed archive.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -193,7 +193,7 @@
"display_name": "G-Code Profile Reader",
"description": "Provides support for importing profiles from g-code files.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -210,7 +210,7 @@
"display_name": "G-Code Reader",
"description": "Allows loading and displaying G-code files.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "VictorLarchenko",
@@ -227,7 +227,7 @@
"display_name": "G-Code Writer",
"description": "Writes g-code to a file.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -244,7 +244,7 @@
"display_name": "Image Reader",
"description": "Enables ability to generate printable geometry from 2D image files.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -261,7 +261,7 @@
"display_name": "Legacy Cura Profile Reader",
"description": "Provides support for importing profiles from legacy Cura versions.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -278,7 +278,7 @@
"display_name": "Machine Settings Action",
"description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "fieldOfView",
@@ -295,7 +295,7 @@
"display_name": "Model Checker",
"description": "Checks models and print configuration for possible printing issues and give suggestions.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -312,7 +312,7 @@
"display_name": "Monitor Stage",
"description": "Provides a monitor stage in Cura.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -329,7 +329,7 @@
"display_name": "Per-Object Settings Tool",
"description": "Provides the per-model settings.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -346,7 +346,7 @@
"display_name": "Post Processing",
"description": "Extension that allows for user created scripts for post processing.",
"package_version": "2.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -363,7 +363,7 @@
"display_name": "Prepare Stage",
"description": "Provides a prepare stage in Cura.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -380,7 +380,7 @@
"display_name": "Preview Stage",
"description": "Provides a preview stage in Cura.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -397,7 +397,7 @@
"display_name": "Removable Drive Output Device",
"description": "Provides removable drive hotplugging and writing support.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -414,7 +414,7 @@
"display_name": "Simulation View",
"description": "Provides the Simulation view.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -431,7 +431,7 @@
"display_name": "Slice Info",
"description": "Submits anonymous slice info. Can be disabled through preferences.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -448,7 +448,7 @@
"display_name": "Solid View",
"description": "Provides a normal solid mesh view.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -465,7 +465,7 @@
"display_name": "Support Eraser Tool",
"description": "Creates an eraser mesh to block the printing of support in certain places.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -482,7 +482,7 @@
"display_name": "Trimesh Reader",
"description": "Provides support for reading model files.",
"package_version": "1.0.0",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -499,7 +499,7 @@
"display_name": "Toolbox",
"description": "Find, manage and install new Cura packages.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -516,7 +516,7 @@
"display_name": "UFP Reader",
"description": "Provides support for reading Ultimaker Format Packages.",
"package_version": "1.0.0",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -533,7 +533,7 @@
"display_name": "UFP Writer",
"description": "Provides support for writing Ultimaker Format Packages.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -550,7 +550,7 @@
"display_name": "Ultimaker Machine Actions",
"description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -567,7 +567,7 @@
"display_name": "UM3 Network Printing",
"description": "Manages network connections to Ultimaker 3 printers.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -584,7 +584,7 @@
"display_name": "USB Printing",
"description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.",
"package_version": "1.0.2",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -601,7 +601,7 @@
"display_name": "Version Upgrade 2.1 to 2.2",
"description": "Upgrades configurations from Cura 2.1 to Cura 2.2.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -618,7 +618,7 @@
"display_name": "Version Upgrade 2.2 to 2.4",
"description": "Upgrades configurations from Cura 2.2 to Cura 2.4.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -635,7 +635,7 @@
"display_name": "Version Upgrade 2.5 to 2.6",
"description": "Upgrades configurations from Cura 2.5 to Cura 2.6.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -652,7 +652,7 @@
"display_name": "Version Upgrade 2.6 to 2.7",
"description": "Upgrades configurations from Cura 2.6 to Cura 2.7.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -669,7 +669,7 @@
"display_name": "Version Upgrade 2.7 to 3.0",
"description": "Upgrades configurations from Cura 2.7 to Cura 3.0.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -686,7 +686,7 @@
"display_name": "Version Upgrade 3.0 to 3.1",
"description": "Upgrades configurations from Cura 3.0 to Cura 3.1.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -703,7 +703,7 @@
"display_name": "Version Upgrade 3.2 to 3.3",
"description": "Upgrades configurations from Cura 3.2 to Cura 3.3.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -720,7 +720,7 @@
"display_name": "Version Upgrade 3.3 to 3.4",
"description": "Upgrades configurations from Cura 3.3 to Cura 3.4.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -737,7 +737,7 @@
"display_name": "Version Upgrade 3.4 to 3.5",
"description": "Upgrades configurations from Cura 3.4 to Cura 3.5.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -754,7 +754,7 @@
"display_name": "Version Upgrade 3.5 to 4.0",
"description": "Upgrades configurations from Cura 3.5 to Cura 4.0.",
"package_version": "1.0.0",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -771,7 +771,7 @@
"display_name": "Version Upgrade 4.0 to 4.1",
"description": "Upgrades configurations from Cura 4.0 to Cura 4.1.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -788,7 +788,7 @@
"display_name": "Version Upgrade 4.1 to 4.2",
"description": "Upgrades configurations from Cura 4.1 to Cura 4.2.",
"package_version": "1.0.0",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -805,7 +805,24 @@
"display_name": "Version Upgrade 4.2 to 4.3",
"description": "Upgrades configurations from Cura 4.2 to Cura 4.3.",
"package_version": "1.0.0",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
+ "website": "https://ultimaker.com",
+ "author": {
+ "author_id": "UltimakerPackages",
+ "display_name": "Ultimaker B.V.",
+ "email": "plugins@ultimaker.com",
+ "website": "https://ultimaker.com"
+ }
+ }
+ },
+ "VersionUpgrade43to44": {
+ "package_info": {
+ "package_id": "VersionUpgrade43to44",
+ "package_type": "plugin",
+ "display_name": "Version Upgrade 4.3 to 4.4",
+ "description": "Upgrades configurations from Cura 4.3 to Cura 4.4.",
+ "package_version": "1.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -822,7 +839,7 @@
"display_name": "X3D Reader",
"description": "Provides support for reading X3D files.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "SevaAlekseyev",
@@ -839,7 +856,7 @@
"display_name": "XML Material Profiles",
"description": "Provides capabilities to read and write XML-based material profiles.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -856,7 +873,7 @@
"display_name": "X-Ray View",
"description": "Provides the X-Ray view.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
@@ -873,7 +890,7 @@
"display_name": "Generic ABS",
"description": "The generic ABS profile which other profiles can be based upon.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -891,7 +908,7 @@
"display_name": "Generic BAM",
"description": "The generic BAM profile which other profiles can be based upon.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -909,7 +926,7 @@
"display_name": "Generic CFF CPE",
"description": "The generic CFF CPE profile which other profiles can be based upon.",
"package_version": "1.1.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -927,7 +944,7 @@
"display_name": "Generic CFF PA",
"description": "The generic CFF PA profile which other profiles can be based upon.",
"package_version": "1.1.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -945,7 +962,7 @@
"display_name": "Generic CPE",
"description": "The generic CPE profile which other profiles can be based upon.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -963,7 +980,7 @@
"display_name": "Generic CPE+",
"description": "The generic CPE+ profile which other profiles can be based upon.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -981,7 +998,7 @@
"display_name": "Generic GFF CPE",
"description": "The generic GFF CPE profile which other profiles can be based upon.",
"package_version": "1.1.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -999,7 +1016,7 @@
"display_name": "Generic GFF PA",
"description": "The generic GFF PA profile which other profiles can be based upon.",
"package_version": "1.1.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -1017,7 +1034,7 @@
"display_name": "Generic HIPS",
"description": "The generic HIPS profile which other profiles can be based upon.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -1035,7 +1052,7 @@
"display_name": "Generic Nylon",
"description": "The generic Nylon profile which other profiles can be based upon.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -1053,7 +1070,7 @@
"display_name": "Generic PC",
"description": "The generic PC profile which other profiles can be based upon.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -1071,7 +1088,7 @@
"display_name": "Generic PETG",
"description": "The generic PETG profile which other profiles can be based upon.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -1089,7 +1106,7 @@
"display_name": "Generic PLA",
"description": "The generic PLA profile which other profiles can be based upon.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -1107,7 +1124,7 @@
"display_name": "Generic PP",
"description": "The generic PP profile which other profiles can be based upon.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -1125,7 +1142,7 @@
"display_name": "Generic PVA",
"description": "The generic PVA profile which other profiles can be based upon.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -1143,7 +1160,7 @@
"display_name": "Generic Tough PLA",
"description": "The generic Tough PLA profile which other profiles can be based upon.",
"package_version": "1.0.2",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -1161,7 +1178,7 @@
"display_name": "Generic TPU",
"description": "The generic TPU profile which other profiles can be based upon.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://github.com/Ultimaker/fdm_materials",
"author": {
"author_id": "Generic",
@@ -1179,7 +1196,7 @@
"display_name": "Dagoma Chromatik PLA",
"description": "Filament testé et approuvé pour les imprimantes 3D Dagoma. Chromatik est l'idéal pour débuter et suivre les tutoriels premiers pas. Il vous offre qualité et résistance pour chacune de vos impressions.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://dagoma.fr/boutique/filaments.html",
"author": {
"author_id": "Dagoma",
@@ -1196,7 +1213,7 @@
"display_name": "FABtotum ABS",
"description": "This material is easy to be extruded but it is not the simplest to use. It is one of the most used in 3D printing to get very well finished objects. It is not sustainable and its smoke can be dangerous if inhaled. The reason to prefer this filament to PLA is mainly because of its precision and mechanical specs. ABS (for plastic) stands for Acrylonitrile Butadiene Styrene and it is a thermoplastic which is widely used in everyday objects. It can be printed with any FFF 3D printer which can get to high temperatures as it must be extruded in a range between 220° and 245°, so it’s compatible with all versions of the FABtotum Personal fabricator.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=40",
"author": {
"author_id": "FABtotum",
@@ -1213,7 +1230,7 @@
"display_name": "FABtotum Nylon",
"description": "When 3D printing started this material was not listed among the extrudable filaments. It is flexible as well as resistant to tractions. It is well known for its uses in textile but also in industries which require a strong and flexible material. There are different kinds of Nylon: 3D printing mostly uses Nylon 6 and Nylon 6.6, which are the most common. It requires higher temperatures to be printed, so a 3D printer must be able to reach them (around 240°C): the FABtotum, of course, can.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=53",
"author": {
"author_id": "FABtotum",
@@ -1230,7 +1247,7 @@
"display_name": "FABtotum PLA",
"description": "It is the most common filament used for 3D printing. It is studied to be bio-degradable as it comes from corn starch’s sugar mainly. It is completely made of renewable sources and has no footprint on polluting. PLA stands for PolyLactic Acid and it is a thermoplastic that today is still considered the easiest material to be 3D printed. It can be extruded at lower temperatures: the standard range of FABtotum’s one is between 185° and 195°.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=39",
"author": {
"author_id": "FABtotum",
@@ -1247,7 +1264,7 @@
"display_name": "FABtotum TPU Shore 98A",
"description": "",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=66",
"author": {
"author_id": "FABtotum",
@@ -1264,7 +1281,7 @@
"display_name": "Fiberlogy HD PLA",
"description": "With our HD PLA you have many more options. You can use this material in two ways. Choose the one you like best. You can use it as a normal PLA and get prints characterized by a very good adhesion between the layers and high precision. You can also make your prints acquire similar properties to that of ABS – better impact resistance and high temperature resistance. All you need is an oven. Yes, an oven! By annealing our HD PLA in an oven, in accordance with the manual, you will avoid all the inconveniences of printing with ABS, such as unpleasant odour or hazardous fumes.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "http://fiberlogy.com/en/fiberlogy-filaments/filament-hd-pla/",
"author": {
"author_id": "Fiberlogy",
@@ -1281,7 +1298,7 @@
"display_name": "Filo3D PLA",
"description": "Fast, safe and reliable printing. PLA is ideal for the fast and reliable printing of parts and prototypes with a great surface quality.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://dagoma.fr",
"author": {
"author_id": "Dagoma",
@@ -1298,7 +1315,7 @@
"display_name": "IMADE3D JellyBOX PETG",
"description": "",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "http://shop.imade3d.com/filament.html",
"author": {
"author_id": "IMADE3D",
@@ -1315,7 +1332,7 @@
"display_name": "IMADE3D JellyBOX PLA",
"description": "",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "http://shop.imade3d.com/filament.html",
"author": {
"author_id": "IMADE3D",
@@ -1332,7 +1349,7 @@
"display_name": "Octofiber PLA",
"description": "PLA material from Octofiber.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://nl.octofiber.com/3d-printing-filament/pla.html",
"author": {
"author_id": "Octofiber",
@@ -1349,7 +1366,7 @@
"display_name": "PolyFlex™ PLA",
"description": "PolyFlex™ is a highly flexible yet easy to print 3D printing material. Featuring good elasticity and a large strain-to- failure, PolyFlex™ opens up a completely new realm of applications.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "http://www.polymaker.com/shop/polyflex/",
"author": {
"author_id": "Polymaker",
@@ -1366,7 +1383,7 @@
"display_name": "PolyMax™ PLA",
"description": "PolyMax™ PLA is a 3D printing material with excellent mechanical properties and printing quality. PolyMax™ PLA has an impact resistance of up to nine times that of regular PLA, and better overall mechanical properties than ABS.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "http://www.polymaker.com/shop/polymax/",
"author": {
"author_id": "Polymaker",
@@ -1383,7 +1400,7 @@
"display_name": "PolyPlus™ PLA True Colour",
"description": "PolyPlus™ PLA is a premium PLA designed for all desktop FDM/FFF 3D printers. It is produced with our patented Jam-Free™ technology that ensures consistent extrusion and prevents jams.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "http://www.polymaker.com/shop/polyplus-true-colour/",
"author": {
"author_id": "Polymaker",
@@ -1400,7 +1417,7 @@
"display_name": "PolyWood™ PLA",
"description": "PolyWood™ is a wood mimic printing material that contains no actual wood ensuring a clean Jam-Free™ printing experience.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "http://www.polymaker.com/shop/polywood/",
"author": {
"author_id": "Polymaker",
@@ -1417,7 +1434,7 @@
"display_name": "Ultimaker ABS",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "1.2.2",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com/products/materials/abs",
"author": {
"author_id": "UltimakerPackages",
@@ -1436,7 +1453,7 @@
"display_name": "Ultimaker Breakaway",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com/products/materials/breakaway",
"author": {
"author_id": "UltimakerPackages",
@@ -1455,7 +1472,7 @@
"display_name": "Ultimaker CPE",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "1.2.2",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com/products/materials/abs",
"author": {
"author_id": "UltimakerPackages",
@@ -1474,7 +1491,7 @@
"display_name": "Ultimaker CPE+",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "1.2.2",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com/products/materials/cpe",
"author": {
"author_id": "UltimakerPackages",
@@ -1493,7 +1510,7 @@
"display_name": "Ultimaker Nylon",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "1.2.2",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com/products/materials/abs",
"author": {
"author_id": "UltimakerPackages",
@@ -1512,7 +1529,7 @@
"display_name": "Ultimaker PC",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "1.2.2",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com/products/materials/pc",
"author": {
"author_id": "UltimakerPackages",
@@ -1531,7 +1548,7 @@
"display_name": "Ultimaker PLA",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "1.2.2",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com/products/materials/abs",
"author": {
"author_id": "UltimakerPackages",
@@ -1550,7 +1567,7 @@
"display_name": "Ultimaker PP",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "1.2.2",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com/products/materials/pp",
"author": {
"author_id": "UltimakerPackages",
@@ -1569,7 +1586,7 @@
"display_name": "Ultimaker PVA",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "1.2.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com/products/materials/abs",
"author": {
"author_id": "UltimakerPackages",
@@ -1588,7 +1605,7 @@
"display_name": "Ultimaker TPU 95A",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "1.2.2",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com/products/materials/tpu-95a",
"author": {
"author_id": "UltimakerPackages",
@@ -1607,7 +1624,7 @@
"display_name": "Ultimaker Tough PLA",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "1.0.3",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://ultimaker.com/products/materials/tough-pla",
"author": {
"author_id": "UltimakerPackages",
@@ -1626,7 +1643,7 @@
"display_name": "Vertex Delta ABS",
"description": "ABS material and quality files for the Delta Vertex K8800.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://vertex3dprinter.eu",
"author": {
"author_id": "Velleman",
@@ -1643,7 +1660,7 @@
"display_name": "Vertex Delta PET",
"description": "ABS material and quality files for the Delta Vertex K8800.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://vertex3dprinter.eu",
"author": {
"author_id": "Velleman",
@@ -1660,7 +1677,7 @@
"display_name": "Vertex Delta PLA",
"description": "ABS material and quality files for the Delta Vertex K8800.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://vertex3dprinter.eu",
"author": {
"author_id": "Velleman",
@@ -1677,7 +1694,7 @@
"display_name": "Vertex Delta TPU",
"description": "ABS material and quality files for the Delta Vertex K8800.",
"package_version": "1.0.1",
- "sdk_version": "6.0.0",
+ "sdk_version": "7.0.0",
"website": "https://vertex3dprinter.eu",
"author": {
"author_id": "Velleman",
diff --git a/resources/definitions/101Hero.def.json b/resources/definitions/101Hero.def.json
index a77ea5ed97..d356d15da9 100644
--- a/resources/definitions/101Hero.def.json
+++ b/resources/definitions/101Hero.def.json
@@ -34,7 +34,6 @@
},
"speed_print": { "default_value": 14 },
"speed_travel": { "value": "speed_print" },
- "speed_infill": { "default_value": 14 },
"speed_wall": { "value": "speed_print * 0.7" },
"speed_topbottom": { "value": "speed_print * 0.7" },
"speed_layer_0": { "value": "speed_print * 0.7" },
diff --git a/resources/definitions/3dator.def.json b/resources/definitions/3dator.def.json
index 901ea87510..ac37523379 100644
--- a/resources/definitions/3dator.def.json
+++ b/resources/definitions/3dator.def.json
@@ -17,15 +17,10 @@
"overrides": {
"machine_name": { "default_value": "3Dator" },
- "speed_travel": { "default_value": 120 },
"prime_tower_size": { "default_value": 8.660254037844387 },
"infill_sparse_density": { "default_value": 20 },
- "speed_wall_x": { "default_value": 45 },
- "speed_wall_0": { "default_value": 40 },
- "speed_topbottom": { "default_value": 35 },
"layer_height": { "default_value": 0.2 },
"speed_print": { "default_value": 50 },
- "speed_infill": { "default_value": 60 },
"machine_heated_bed": { "default_value": true },
"machine_center_is_zero": { "default_value": false },
"machine_height": { "default_value": 260 },
@@ -33,8 +28,6 @@
"machine_depth": { "default_value": 170 },
"machine_width": { "default_value": 180 },
"retraction_speed": {"default_value":100},
- "cool_fan_speed_min": {"default_value": 20},
- "cool_fan_speed_max": {"default_value": 70},
"adhesion_type": { "default_value": "none" },
"machine_head_with_fans_polygon": {
"default_value": [
diff --git a/resources/definitions/Mark2_for_Ultimaker2.def.json b/resources/definitions/Mark2_for_Ultimaker2.def.json
index 5aada425fd..1aca2a3844 100644
--- a/resources/definitions/Mark2_for_Ultimaker2.def.json
+++ b/resources/definitions/Mark2_for_Ultimaker2.def.json
@@ -79,9 +79,6 @@
"line_width": {
"value": "round(machine_nozzle_size * 0.875, 2)"
},
- "speed_layer_0": {
- "default_value": 20
- },
"speed_support": {
"value": "speed_wall_0"
},
@@ -107,22 +104,18 @@
"default_value": 25
},
"switch_extruder_retraction_amount": {
- "default_value": 0,
"value": "retraction_amount",
"enabled": false
},
"switch_extruder_retraction_speeds": {
- "default_value": 25,
"value": "retraction_speed",
"enabled": false
},
"switch_extruder_retraction_speed": {
- "default_value": 25,
"value": "retraction_retract_speed",
"enabled": false
},
"switch_extruder_prime_speed": {
- "default_value": 25,
"value": "retraction_prime_speed",
"enabled": false
},
@@ -142,11 +135,9 @@
"default_value": "RepRap (Marlin/Sprinter)"
},
"machine_start_gcode" : {
- "default_value": "",
"value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"G21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nM200 D0 T0 ;reset filament diameter\\nM200 D0 T1\\nG28 Z0; home all\\nG28 X0 Y0\\nG0 Z20 F2400 ;move the platform to 20mm\\nG92 E0\\nM190 S{material_bed_temperature_layer_0}\\nM109 T0 S{material_standby_temperature, 0}\\nM109 T1 S{material_print_temperature_layer_0, 1}\\nM104 T0 S{material_print_temperature_layer_0, 0}\\nT1 ; move to the 2th head\\nG0 Z20 F2400\\nG92 E-7.0 ;prime distance\\nG1 E0 F45 ;purge nozzle\\nG1 E-5.1 F1500 ; retract\\nG1 X90 Z0.01 F5000 ; move away from the prime poop\\nG1 X50 F9000\\nG0 Z20 F2400\\nT0 ; move to the first head\\nM104 T1 S{material_standby_temperature, 1}\\nG0 Z20 F2400\\nM104 T{initial_extruder_nr} S{material_print_temperature_layer_0, initial_extruder_nr}\\nG92 E-7.0\\nG1 E0 F45 ;purge nozzle\\nG1 X60 Z0.01 F5000 ; move away from the prime poop\\nG1 X20 F9000\\nM400 ;finish all moves\\nG92 E0\\n;end of startup sequence\\n\""
},
"machine_end_gcode" : {
- "default_value": "",
"value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"G90 ;absolute positioning\\nM104 S0 T0 ;extruder heater off\\nM104 S0 T1\\nM140 S0 ;turn off bed\\nT0 ; move to the first head\\nM107 ;fan off\""
},
"machine_extruder_count": {
@@ -158,12 +149,10 @@
},
"acceleration_print":
{
- "default_value": 2000,
"value": "2000"
},
"acceleration_travel":
{
- "default_value": 3000,
"value": "acceleration_print if magic_spiralize else 3000"
},
"acceleration_layer_0": { "value": "acceleration_topbottom" },
@@ -183,7 +172,6 @@
},
"jerk_travel":
{
- "default_value": 20,
"value": "jerk_print if magic_spiralize else 20"
},
"jerk_layer_0": { "value": "jerk_topbottom" },
@@ -209,10 +197,10 @@
"enabled": false
},
"prime_tower_position_x": {
- "default_value": 185
+ "value": "185"
},
"prime_tower_position_y": {
- "default_value": 160
+ "value": "160"
},
"machine_disallowed_areas": {
"default_value": [
diff --git a/resources/definitions/abax_pri3.def.json b/resources/definitions/abax_pri3.def.json
index 1ab48b865a..529636be90 100644
--- a/resources/definitions/abax_pri3.def.json
+++ b/resources/definitions/abax_pri3.def.json
@@ -49,33 +49,9 @@
"top_bottom_thickness": {
"default_value": 1
},
- "bottom_thickness": {
- "default_value": 1
- },
- "material_print_temperature": {
- "default_value": 200
- },
- "material_bed_temperature": {
- "default_value": 0
- },
"speed_print": {
"default_value": 40
},
- "speed_infill": {
- "default_value": 70
- },
- "speed_wall": {
- "default_value": 25
- },
- "speed_topbottom": {
- "default_value": 15
- },
- "speed_travel": {
- "default_value": 150
- },
- "speed_layer_0": {
- "default_value": 30
- },
"support_enable": {
"default_value": true
}
diff --git a/resources/definitions/abax_pri5.def.json b/resources/definitions/abax_pri5.def.json
index 46229ce756..9e4e7e3b20 100644
--- a/resources/definitions/abax_pri5.def.json
+++ b/resources/definitions/abax_pri5.def.json
@@ -49,33 +49,9 @@
"top_bottom_thickness": {
"default_value": 1
},
- "bottom_thickness": {
- "default_value": 1
- },
- "material_print_temperature": {
- "default_value": 200
- },
- "material_bed_temperature": {
- "default_value": 0
- },
"speed_print": {
"default_value": 40
},
- "speed_infill": {
- "default_value": 70
- },
- "speed_wall": {
- "default_value": 25
- },
- "speed_topbottom": {
- "default_value": 15
- },
- "speed_travel": {
- "default_value": 150
- },
- "speed_layer_0": {
- "default_value": 30
- },
"support_enable": {
"default_value": true
}
diff --git a/resources/definitions/abax_titan.def.json b/resources/definitions/abax_titan.def.json
index 9f67117d6c..98643df22b 100644
--- a/resources/definitions/abax_titan.def.json
+++ b/resources/definitions/abax_titan.def.json
@@ -49,33 +49,9 @@
"top_bottom_thickness": {
"default_value": 1
},
- "bottom_thickness": {
- "default_value": 1
- },
- "material_print_temperature": {
- "default_value": 200
- },
- "material_bed_temperature": {
- "default_value": 0
- },
"speed_print": {
"default_value": 40
},
- "speed_infill": {
- "default_value": 70
- },
- "speed_wall": {
- "default_value": 25
- },
- "speed_topbottom": {
- "default_value": 15
- },
- "speed_travel": {
- "default_value": 150
- },
- "speed_layer_0": {
- "default_value": 30
- },
"support_enable": {
"default_value": true
}
diff --git a/resources/definitions/alfawise_u20.def.json b/resources/definitions/alfawise_u20.def.json
index 748bf8797a..4da42fdb1d 100644
--- a/resources/definitions/alfawise_u20.def.json
+++ b/resources/definitions/alfawise_u20.def.json
@@ -47,12 +47,6 @@
"material_diameter": {
"default_value": 1.75
},
- "material_print_temperature": {
- "default_value": 210
- },
- "material_bed_temperature": {
- "default_value": 50
- },
"layer_height_0": {
"default_value": 0.2
},
@@ -62,21 +56,6 @@
"speed_print": {
"default_value": 40
},
- "speed_infill": {
- "default_value": 40
- },
- "speed_wall": {
- "default_value": 35
- },
- "speed_topbottom": {
- "default_value": 35
- },
- "speed_travel": {
- "default_value": 120
- },
- "speed_layer_0": {
- "default_value": 20
- },
"support_enable": {
"default_value": true
},
diff --git a/resources/definitions/alfawise_u30.def.json b/resources/definitions/alfawise_u30.def.json
index 44caf61d1a..e05536f66c 100644
--- a/resources/definitions/alfawise_u30.def.json
+++ b/resources/definitions/alfawise_u30.def.json
@@ -22,16 +22,9 @@
"default_value": "; -- END GCODE --\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F80 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning\nM107 ;turn the fan off; -- end of END GCODE --"
},
"material_diameter": { "default_value": 1.75 },
- "material_print_temperature": { "default_value": 210 },
- "material_bed_temperature": { "default_value": 50 },
"layer_height_0": { "default_value": 0.2 },
"wall_thickness": { "default_value": 1.2 },
"speed_print": { "default_value": 40 },
- "speed_infill": { "default_value": 50 },
- "speed_wall": { "default_value": 35 },
- "speed_topbottom": { "default_value": 35 },
- "speed_travel": { "default_value": 120 },
- "speed_layer_0": { "default_value": 20 },
"support_enable": { "default_value": true },
"retraction_enable": { "default_value": true },
"retraction_amount": { "default_value": 5 },
diff --git a/resources/definitions/bfb.def.json b/resources/definitions/bfb.def.json
index d1dfa9ef1b..e88c8c792b 100644
--- a/resources/definitions/bfb.def.json
+++ b/resources/definitions/bfb.def.json
@@ -15,26 +15,19 @@
},
"overrides": {
- "speed_topbottom": { "default_value": 40 },
"speed_print": { "default_value": 40 },
"machine_extruder_count": { "default_value": 1 },
"prime_tower_size": { "default_value": 7.745966692414834 },
"machine_name": { "default_value": "BFB_Test" },
"machine_heated_bed": { "default_value": false },
- "speed_layer_0": { "default_value": 25 },
"machine_width": { "default_value": 275 },
"machine_gcode_flavor": { "default_value": "BFB" },
"machine_depth": { "default_value": 265 },
- "speed_infill": { "default_value": 30 },
"machine_center_is_zero": { "default_value": true },
"machine_height": { "default_value": 240 },
"layer_height": { "default_value": 0.25 },
- "material_print_temperature": { "default_value": 200 },
"retraction_amount": { "default_value": 0.05 },
- "speed_wall_0": { "default_value": 25 },
- "speed_travel": { "default_value": 50 },
"infill_sparse_density": { "default_value": 10 },
- "layer_height_0": { "default_value": 0.5 },
- "speed_wall_x": { "default_value": 20 }
+ "layer_height_0": { "default_value": 0.5 }
}
}
diff --git a/resources/definitions/bibo2_dual.def.json b/resources/definitions/bibo2_dual.def.json
index dbfb03a0c9..a644185915 100644
--- a/resources/definitions/bibo2_dual.def.json
+++ b/resources/definitions/bibo2_dual.def.json
@@ -1,5 +1,4 @@
{
- "id": "BIBO2 dual",
"version": 2,
"name": "BIBO2 dual",
"inherits": "fdmprinter",
@@ -85,10 +84,10 @@
"default_value": 2
},
"prime_tower_position_x": {
- "default_value": 50
+ "value": "50"
},
"prime_tower_position_y": {
- "default_value": 50
+ "value": "50"
}
}
}
diff --git a/resources/definitions/bq_hephestos.def.json b/resources/definitions/bq_hephestos.def.json
index be024cd6fa..d9e84dae87 100644
--- a/resources/definitions/bq_hephestos.def.json
+++ b/resources/definitions/bq_hephestos.def.json
@@ -54,33 +54,9 @@
"top_bottom_thickness": {
"default_value": 1
},
- "bottom_thickness": {
- "default_value": 1
- },
- "material_print_temperature": {
- "default_value": 220
- },
- "material_bed_temperature": {
- "default_value": 0
- },
"speed_print": {
"default_value": 40
},
- "speed_infill": {
- "default_value": 40
- },
- "speed_wall": {
- "default_value": 35
- },
- "speed_topbottom": {
- "default_value": 35
- },
- "speed_travel": {
- "default_value": 120
- },
- "speed_layer_0": {
- "default_value": 20
- },
"support_enable": {
"default_value": true
}
diff --git a/resources/definitions/bq_hephestos_2.def.json b/resources/definitions/bq_hephestos_2.def.json
index 90a86433fb..5c122eb9a4 100644
--- a/resources/definitions/bq_hephestos_2.def.json
+++ b/resources/definitions/bq_hephestos_2.def.json
@@ -24,26 +24,14 @@
"machine_height": { "default_value": 220 },
"machine_heated_bed": { "default_value": false },
"machine_center_is_zero": { "default_value": false },
- "material_print_temperature": { "default_value": 210 },
- "material_bed_temperature": { "default_value": 0 },
"layer_height": { "default_value": 0.2 },
"layer_height_0": { "default_value": 0.2 },
- "wall_line_count": { "default_value": 3 },
"wall_thickness": { "default_value": 1.2 },
"top_bottom_thickness": { "default_value": 1.2 },
"infill_sparse_density": { "default_value": 20 },
- "infill_overlap": { "default_value": 15 },
"speed_print": { "default_value": 60 },
- "speed_travel": { "default_value": 160 },
- "speed_layer_0": { "default_value": 30 },
- "speed_wall_x": { "default_value": 35 },
- "speed_wall_0": { "default_value": 30 },
- "speed_infill": { "default_value": 80 },
- "speed_topbottom": { "default_value": 35 },
- "skirt_brim_speed": { "default_value": 35 },
"skirt_line_count": { "default_value": 4 },
"skirt_brim_minimal_length": { "default_value": 30 },
- "skirt_gap": { "default_value": 6 },
- "cool_fan_full_at_height": { "default_value": 0.4 }
+ "skirt_gap": { "default_value": 6 }
}
}
diff --git a/resources/definitions/bq_hephestos_xl.def.json b/resources/definitions/bq_hephestos_xl.def.json
index a8d63cbb41..16d0953bf1 100644
--- a/resources/definitions/bq_hephestos_xl.def.json
+++ b/resources/definitions/bq_hephestos_xl.def.json
@@ -53,33 +53,9 @@
"top_bottom_thickness": {
"default_value": 1
},
- "bottom_thickness": {
- "default_value": 1
- },
- "material_print_temperature": {
- "default_value": 220
- },
- "material_bed_temperature": {
- "default_value": 0
- },
"speed_print": {
"default_value": 40
},
- "speed_infill": {
- "default_value": 40
- },
- "speed_wall": {
- "default_value": 35
- },
- "speed_topbottom": {
- "default_value": 35
- },
- "speed_travel": {
- "default_value": 120
- },
- "speed_layer_0": {
- "default_value": 20
- },
"support_enable": {
"default_value": true
}
diff --git a/resources/definitions/bq_witbox.def.json b/resources/definitions/bq_witbox.def.json
index b96da6179c..fce2af9f97 100644
--- a/resources/definitions/bq_witbox.def.json
+++ b/resources/definitions/bq_witbox.def.json
@@ -54,33 +54,9 @@
"top_bottom_thickness": {
"default_value": 1
},
- "bottom_thickness": {
- "default_value": 1
- },
- "material_print_temperature": {
- "default_value": 220
- },
- "material_bed_temperature": {
- "default_value": 0
- },
"speed_print": {
"default_value": 40
},
- "speed_infill": {
- "default_value": 40
- },
- "speed_wall": {
- "default_value": 35
- },
- "speed_topbottom": {
- "default_value": 35
- },
- "speed_travel": {
- "default_value": 120
- },
- "speed_layer_0": {
- "default_value": 20
- },
"support_enable": {
"default_value": true
}
diff --git a/resources/definitions/bq_witbox_2.def.json b/resources/definitions/bq_witbox_2.def.json
index 7412647852..d1114aafd6 100644
--- a/resources/definitions/bq_witbox_2.def.json
+++ b/resources/definitions/bq_witbox_2.def.json
@@ -41,21 +41,12 @@
"machine_gcode_flavor": {
"default_value": "RepRap (Marlin/Sprinter)"
},
- "material_print_temperature": {
- "default_value": 210
- },
- "material_bed_temperature": {
- "default_value": 0
- },
"layer_height": {
"default_value": 0.2
},
"layer_height_0": {
"default_value": 0.2
},
- "wall_line_count": {
- "default_value": 3
- },
"wall_thickness": {
"default_value": 1.2
},
@@ -65,33 +56,9 @@
"infill_sparse_density": {
"default_value": 20
},
- "infill_overlap": {
- "default_value": 15
- },
"speed_print": {
"default_value": 60
},
- "speed_travel": {
- "default_value": 160
- },
- "speed_layer_0": {
- "default_value": 30
- },
- "speed_wall_x": {
- "default_value": 35
- },
- "speed_wall_0": {
- "default_value": 30
- },
- "speed_infill": {
- "default_value": 80
- },
- "speed_topbottom": {
- "default_value": 35
- },
- "skirt_brim_speed": {
- "default_value": 35
- },
"skirt_line_count": {
"default_value": 4
},
@@ -101,9 +68,6 @@
"skirt_gap": {
"default_value": 6
},
- "cool_fan_full_at_height": {
- "default_value": 0.4
- },
"support_enable": {
"default_value": false
}
diff --git a/resources/definitions/builder_premium_large.def.json b/resources/definitions/builder_premium_large.def.json
index 3ceae8d63f..d19382a591 100644
--- a/resources/definitions/builder_premium_large.def.json
+++ b/resources/definitions/builder_premium_large.def.json
@@ -35,8 +35,6 @@
"material_standby_temperature": { "value": "material_print_temperature" },
"switch_extruder_retraction_speeds": {"default_value": 15 },
- "switch_extruder_retraction_speed": {"default_value": 15 },
- "switch_extruder_prime_speed": {"default_value": 15 },
"switch_extruder_retraction_amount": {"value": 1 },
"speed_travel": { "value": "100" },
@@ -50,8 +48,8 @@
"speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 25)" },
"speed_wall_x": { "value": "speed_wall" },
- "prime_tower_position_x": { "default_value": 175 },
- "prime_tower_position_y": { "default_value": 178 },
+ "prime_tower_position_x": { "value": "175" },
+ "prime_tower_position_y": { "value": "178" },
"prime_tower_wipe_enabled": { "default_value": false },
"prime_tower_min_volume": { "default_value": 50 },
@@ -85,14 +83,12 @@
"retraction_amount": { "default_value": 3 },
"retraction_speed": { "default_value": 15 },
- "retraction_retract_speed": { "default_value": 15 },
- "retraction_prime_speed": { "default_value": 15 },
"travel_retract_before_outer_wall": { "default_value": true },
"skin_overlap": { "value": "15" },
"adhesion_type": { "default_value": "skirt" },
"machine_nozzle_heat_up_speed": { "default_value": 2 },
"machine_nozzle_cool_down_speed": { "default_value": 2 },
- "machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
+ "machine_head_with_fans_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
"gantry_height": { "value": "55" },
"machine_max_feedrate_x": { "default_value": 300 },
"machine_max_feedrate_y": { "default_value": 300 },
diff --git a/resources/definitions/builder_premium_medium.def.json b/resources/definitions/builder_premium_medium.def.json
index 5f608ba2a8..e5b8f1785c 100644
--- a/resources/definitions/builder_premium_medium.def.json
+++ b/resources/definitions/builder_premium_medium.def.json
@@ -35,8 +35,6 @@
"material_standby_temperature": { "value": "material_print_temperature" },
"switch_extruder_retraction_speeds": {"default_value": 15 },
- "switch_extruder_retraction_speed": {"default_value": 15 },
- "switch_extruder_prime_speed": {"default_value": 15 },
"switch_extruder_retraction_amount": {"value": 1 },
"speed_travel": { "value": "100" },
@@ -50,8 +48,8 @@
"speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 25)" },
"speed_wall_x": { "value": "speed_wall" },
- "prime_tower_position_x": { "default_value": 175 },
- "prime_tower_position_y": { "default_value": 178 },
+ "prime_tower_position_x": { "value": "175" },
+ "prime_tower_position_y": { "value": "178" },
"prime_tower_wipe_enabled": { "default_value": false },
"prime_tower_min_volume": { "default_value": 50 },
@@ -85,14 +83,12 @@
"retraction_amount": { "default_value": 3 },
"retraction_speed": { "default_value": 15 },
- "retraction_retract_speed": { "default_value": 15 },
- "retraction_prime_speed": { "default_value": 15 },
"travel_retract_before_outer_wall": { "default_value": true },
"skin_overlap": { "value": "15" },
"adhesion_type": { "default_value": "skirt" },
"machine_nozzle_heat_up_speed": { "default_value": 2 },
"machine_nozzle_cool_down_speed": { "default_value": 2 },
- "machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
+ "machine_head_with_fans_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
"gantry_height": { "value": "55" },
"machine_max_feedrate_x": { "default_value": 300 },
"machine_max_feedrate_y": { "default_value": 300 },
diff --git a/resources/definitions/builder_premium_small.def.json b/resources/definitions/builder_premium_small.def.json
index a19773ec05..4bcbd7d526 100644
--- a/resources/definitions/builder_premium_small.def.json
+++ b/resources/definitions/builder_premium_small.def.json
@@ -34,8 +34,6 @@
"material_standby_temperature": { "value": "material_print_temperature" },
"switch_extruder_retraction_speeds": {"default_value": 15 },
- "switch_extruder_retraction_speed": {"default_value": 15 },
- "switch_extruder_prime_speed": {"default_value": 15 },
"switch_extruder_retraction_amount": {"value": 1 },
"speed_travel": { "value": "100" },
@@ -49,8 +47,8 @@
"speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 25)" },
"speed_wall_x": { "value": "speed_wall" },
- "prime_tower_position_x": { "default_value": 175 },
- "prime_tower_position_y": { "default_value": 178 },
+ "prime_tower_position_x": { "value": "175" },
+ "prime_tower_position_y": { "value": "178" },
"prime_tower_wipe_enabled": { "default_value": false },
"prime_tower_min_volume": { "default_value": 50 },
@@ -84,14 +82,12 @@
"retraction_amount": { "default_value": 3 },
"retraction_speed": { "default_value": 15 },
- "retraction_retract_speed": { "default_value": 15 },
- "retraction_prime_speed": { "default_value": 15 },
"travel_retract_before_outer_wall": { "default_value": true },
"skin_overlap": { "value": "15" },
"adhesion_type": { "default_value": "skirt" },
"machine_nozzle_heat_up_speed": { "default_value": 2 },
"machine_nozzle_cool_down_speed": { "default_value": 2 },
- "machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
+ "machine_head_with_fans_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
"gantry_height": { "value": "55" },
"machine_max_feedrate_x": { "default_value": 300 },
"machine_max_feedrate_y": { "default_value": 300 },
diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json
index 4ed1a9f2d9..e7a005682d 100644
--- a/resources/definitions/cartesio.def.json
+++ b/resources/definitions/cartesio.def.json
@@ -44,8 +44,8 @@
"prime_tower_enable": { "default_value": false },
"prime_tower_min_volume": { "value": "0.7" },
"prime_tower_size": { "value": 24.0 },
- "prime_tower_position_x": { "value": 125 },
- "prime_tower_position_y": { "value": 70 },
+ "prime_tower_position_x": { "value": "125" },
+ "prime_tower_position_y": { "value": "70" },
"prime_blob_enable": { "default_value": false },
"machine_max_feedrate_z": { "default_value": 20 },
"machine_disallowed_areas": { "default_value": [
diff --git a/resources/definitions/cocoon_create_modelmaker.def.json b/resources/definitions/cocoon_create_modelmaker.def.json
index 83d1f41a99..b738dc64ff 100644
--- a/resources/definitions/cocoon_create_modelmaker.def.json
+++ b/resources/definitions/cocoon_create_modelmaker.def.json
@@ -47,9 +47,6 @@
"material_diameter": {
"default_value": 1.75
},
- "material_print_temperature": {
- "default_value": 220
- },
"layer_height": {
"default_value": 0.10
},
@@ -65,21 +62,6 @@
"speed_print": {
"default_value": 40
},
- "speed_infill": {
- "default_value": 40
- },
- "speed_wall": {
- "default_value": 35
- },
- "speed_topbottom": {
- "default_value": 35
- },
- "speed_travel": {
- "default_value": 70
- },
- "speed_layer_0": {
- "default_value": 20
- },
"support_enable": {
"default_value": true
},
diff --git a/resources/definitions/creality_base.def.json b/resources/definitions/creality_base.def.json
index d7e028f31a..7e91fb4989 100644
--- a/resources/definitions/creality_base.def.json
+++ b/resources/definitions/creality_base.def.json
@@ -125,7 +125,7 @@
"overrides": {
"machine_name": { "default_value": "Creawsome Base Printer" },
"machine_start_gcode": { "default_value": "M201 X500.00 Y500.00 Z100.00 E5000.00 ;Setup machine max acceleration\nM203 X500.00 Y500.00 Z10.00 E50.00 ;Setup machine max feedrate\nM204 P500.00 R1000.00 T500.00 ;Setup Print/Retract/Travel acceleration\nM205 X8.00 Y8.00 Z0.40 E5.00 ;Setup Jerk\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nG28 ;Home\n\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\n" },
- "machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\n\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" },
+ "machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\n\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" },
"machine_max_feedrate_x": { "value": 500 },
"machine_max_feedrate_y": { "value": 500 },
diff --git a/resources/definitions/creality_cr-x.def.json b/resources/definitions/creality_cr-x.def.json
index 0117c4fffe..13409a7212 100644
--- a/resources/definitions/creality_cr-x.def.json
+++ b/resources/definitions/creality_cr-x.def.json
@@ -1,5 +1,4 @@
{
- "id": "CR-X",
"version": 2,
"name": "Creality CR-X",
"inherits": "fdmprinter",
@@ -32,7 +31,6 @@
"adhesion_type": { "default_value": "skirt" },
"gantry_height": { "value": "30" },
"speed_print": { "default_value": 60 },
- "speed_travel": { "default_value": 120 },
"machine_max_acceleration_x": { "default_value": 500 },
"machine_max_acceleration_y": { "default_value": 500 },
"machine_max_acceleration_z": { "default_value": 100 },
@@ -43,9 +41,7 @@
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_start_gcode": { "default_value": "G21 ;metric values\nG28 ;home all\nG90 ;absolute positioning\nM107 ;start with the fan off\nG1 F2400 Z15.0 ;raise the nozzle 15mm\nM109 S{material_print_temperature} ;Set Extruder Temperature and Wait\nM190 S{material_bed_temperature}; Wait for bed temperature to reach target temp\nT0 ;Switch to Extruder 1\nG1 F3000 X5 Y10 Z0.2 ;move to prime start position\nG92 E0 ;reset extrusion distance\nG1 F600 X160 E15 ;prime nozzle in a line\nG1 F5000 X180 ;quick wipe\nG92 E0 ;reset extrusion distance" },
"machine_end_gcode": { "default_value": "M104 S0 ;hotend off\nM140 S0 ;bed off\nG92 E0\nG1 F2000 E-100 ;retract filament 100mm\nG92 E0\nG1 F3000 X0 Y270 ;move bed for easy part removal\nM84 ;disable steppers" },
- "material_print_temperature": { "default_value": 200 },
"wall_thickness": { "default_value": 1 },
- "top_bottom_thickness": { "default_value": 1 },
- "bottom_thickness": { "default_value": 1 }
+ "top_bottom_thickness": { "default_value": 1 }
}
}
diff --git a/resources/definitions/creality_cr10.def.json b/resources/definitions/creality_cr10.def.json
index 0a08c56cc6..85e0f0a435 100644
--- a/resources/definitions/creality_cr10.def.json
+++ b/resources/definitions/creality_cr10.def.json
@@ -7,13 +7,6 @@
"machine_width": { "default_value": 300 },
"machine_depth": { "default_value": 300 },
"machine_height": { "default_value": 400 },
- "machine_head_polygon": { "default_value": [
- [-26, 34],
- [-26, -32],
- [22, -32],
- [22, 34]
- ]
- },
"machine_head_with_fans_polygon": { "default_value": [
[-26, 34],
[-26, -32],
diff --git a/resources/definitions/creality_cr10max.def.json b/resources/definitions/creality_cr10max.def.json
index cc7dfa6faf..a7e40d5bfc 100644
--- a/resources/definitions/creality_cr10max.def.json
+++ b/resources/definitions/creality_cr10max.def.json
@@ -8,13 +8,6 @@
"machine_width": { "default_value": 450 },
"machine_depth": { "default_value": 450 },
"machine_height": { "default_value": 470 },
- "machine_head_polygon": { "default_value": [
- [-44, 34],
- [-44, -34],
- [18, -34],
- [18, 34]
- ]
- },
"machine_head_with_fans_polygon": { "default_value": [
[-44, 34],
[-44, -34],
diff --git a/resources/definitions/creality_cr10mini.def.json b/resources/definitions/creality_cr10mini.def.json
index bdc0d4406e..621be5f0f3 100644
--- a/resources/definitions/creality_cr10mini.def.json
+++ b/resources/definitions/creality_cr10mini.def.json
@@ -7,13 +7,6 @@
"machine_width": { "default_value": 300 },
"machine_depth": { "default_value": 220 },
"machine_height": { "default_value": 300 },
- "machine_head_polygon": { "default_value": [
- [-26, 34],
- [-26, -32],
- [22, -32],
- [22, 34]
- ]
- },
"machine_head_with_fans_polygon": { "default_value": [
[-26, 34],
[-26, -32],
diff --git a/resources/definitions/creality_cr10s4.def.json b/resources/definitions/creality_cr10s4.def.json
index 593a526fc3..ccecd41a1d 100644
--- a/resources/definitions/creality_cr10s4.def.json
+++ b/resources/definitions/creality_cr10s4.def.json
@@ -7,13 +7,6 @@
"machine_width": { "default_value": 400 },
"machine_depth": { "default_value": 400 },
"machine_height": { "default_value": 400 },
- "machine_head_polygon": { "default_value": [
- [-26, 34],
- [-26, -32],
- [22, -32],
- [22, 34]
- ]
- },
"machine_head_with_fans_polygon": { "default_value": [
[-26, 34],
[-26, -32],
diff --git a/resources/definitions/creality_cr10s5.def.json b/resources/definitions/creality_cr10s5.def.json
index 91469deb7f..105e1d0458 100644
--- a/resources/definitions/creality_cr10s5.def.json
+++ b/resources/definitions/creality_cr10s5.def.json
@@ -7,13 +7,6 @@
"machine_width": { "default_value": 500 },
"machine_depth": { "default_value": 500 },
"machine_height": { "default_value": 500 },
- "machine_head_polygon": { "default_value": [
- [-26, 34],
- [-26, -32],
- [22, -32],
- [22, 34]
- ]
- },
"machine_head_with_fans_polygon": { "default_value": [
[-26, 34],
[-26, -32],
diff --git a/resources/definitions/creality_cr10spro.def.json b/resources/definitions/creality_cr10spro.def.json
index 86897e711a..28c8dda0a5 100644
--- a/resources/definitions/creality_cr10spro.def.json
+++ b/resources/definitions/creality_cr10spro.def.json
@@ -5,13 +5,6 @@
"overrides": {
"machine_name": { "default_value": "Creality CR-10S Pro" },
"machine_start_gcode": { "default_value": "M201 X500.00 Y500.00 Z100.00 E5000.00 ;Setup machine max acceleration\nM203 X500.00 Y500.00 Z10.00 E50.00 ;Setup machine max feedrate\nM204 P500.00 R1000.00 T500.00 ;Setup Print/Retract/Travel acceleration\nM205 X8.00 Y8.00 Z0.40 E5.00 ;Setup Jerk\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nG28 ;Home\nM420 S1 Z2 ;Enable ABL using saved Mesh and Fade Height\n\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\n"},
- "machine_head_polygon": { "default_value": [
- [-44, 34],
- [-44, -34],
- [18, -34],
- [18, 34]
- ]
- },
"machine_head_with_fans_polygon": { "default_value": [
[-44, 34],
[-44, -34],
diff --git a/resources/definitions/creality_cr20.def.json b/resources/definitions/creality_cr20.def.json
index af027f2452..b18c2709e6 100644
--- a/resources/definitions/creality_cr20.def.json
+++ b/resources/definitions/creality_cr20.def.json
@@ -7,13 +7,6 @@
"machine_width": { "default_value": 220 },
"machine_depth": { "default_value": 220 },
"machine_height": { "default_value": 250 },
- "machine_head_polygon": { "default_value": [
- [-26, 34],
- [-26, -32],
- [22, -32],
- [22, 34]
- ]
- },
"machine_head_with_fans_polygon": { "default_value": [
[-26, 34],
[-26, -32],
diff --git a/resources/definitions/creality_ender2.def.json b/resources/definitions/creality_ender2.def.json
index 55b2e88478..2a5e14c828 100644
--- a/resources/definitions/creality_ender2.def.json
+++ b/resources/definitions/creality_ender2.def.json
@@ -8,13 +8,6 @@
"machine_width": { "default_value": 150 },
"machine_depth": { "default_value": 150 },
"machine_height": { "default_value": 200 },
- "machine_head_polygon": { "default_value": [
- [-26, 34],
- [-26, -32],
- [22, -32],
- [22, 34]
- ]
- },
"machine_head_with_fans_polygon": { "default_value": [
[-26, 34],
[-26, -32],
diff --git a/resources/definitions/creality_ender3.def.json b/resources/definitions/creality_ender3.def.json
index 645be52bc8..37df844560 100644
--- a/resources/definitions/creality_ender3.def.json
+++ b/resources/definitions/creality_ender3.def.json
@@ -9,16 +9,14 @@
},
"overrides": {
"machine_name": { "default_value": "Creality Ender-3" },
- "machine_width": { "default_value": 220 },
- "machine_depth": { "default_value": 220 },
+ "machine_width": { "default_value": 235 },
+ "machine_depth": { "default_value": 235 },
"machine_height": { "default_value": 250 },
- "machine_head_polygon": { "default_value": [
- [-1, 1],
- [-1, -1],
- [1, -1],
- [1, 1]
- ]
- },
+ "machine_disallowed_areas": {
+ "default_value": [
+ [[-117.5, 117.5], [-117.5, 108], [117.5, 108], [117.5, 117.5]],
+ [[-117.5, -108], [-117.5, -117.5], [117.5, -117.5], [117.5, -108]]
+ ]},
"machine_head_with_fans_polygon": { "default_value": [
[-26, 34],
[-26, -32],
@@ -26,7 +24,10 @@
[32, 34]
]
},
+ "machine_start_gcode": {
+ "default_value": "; Ender 3 Custom Start G-code\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish"
+ },
"gantry_height": { "value": 25 }
}
-}
\ No newline at end of file
+}
diff --git a/resources/definitions/creality_ender4.def.json b/resources/definitions/creality_ender4.def.json
index 6962be558e..9c13797c92 100644
--- a/resources/definitions/creality_ender4.def.json
+++ b/resources/definitions/creality_ender4.def.json
@@ -7,13 +7,6 @@
"machine_width": { "default_value": 452 },
"machine_depth": { "default_value": 468 },
"machine_height": { "default_value": 482 },
- "machine_head_polygon": { "default_value": [
- [-26, 34],
- [-26, -32],
- [22, -32],
- [22, 34]
- ]
- },
"machine_head_with_fans_polygon": { "default_value": [
[-26, 34],
[-26, -32],
diff --git a/resources/definitions/creality_ender5.def.json b/resources/definitions/creality_ender5.def.json
index d95f4a1467..1b4be4d71f 100644
--- a/resources/definitions/creality_ender5.def.json
+++ b/resources/definitions/creality_ender5.def.json
@@ -4,17 +4,10 @@
"inherits": "creality_base",
"overrides": {
"machine_name": { "default_value": "Creality Ender-5" },
- "machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\n\nG1 X0 Y0 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" },
+ "machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\n\nG1 X0 Y0 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" },
"machine_width": { "default_value": 220 },
"machine_depth": { "default_value": 220 },
"machine_height": { "default_value": 300 },
- "machine_head_polygon": { "default_value": [
- [-26, 34],
- [-26, -32],
- [22, -32],
- [22, 34]
- ]
- },
"machine_head_with_fans_polygon": { "default_value": [
[-26, 34],
[-26, -32],
diff --git a/resources/definitions/creality_ender5plus.def.json b/resources/definitions/creality_ender5plus.def.json
index da4e2af635..48ebad61ea 100644
--- a/resources/definitions/creality_ender5plus.def.json
+++ b/resources/definitions/creality_ender5plus.def.json
@@ -8,13 +8,6 @@
"machine_width": { "default_value": 350 },
"machine_depth": { "default_value": 350 },
"machine_height": { "default_value": 400 },
- "machine_head_polygon": { "default_value": [
- [-26, 34],
- [-26, -32],
- [22, -32],
- [22, 34]
- ]
- },
"machine_head_with_fans_polygon": { "default_value": [
[-26, 34],
[-26, -32],
diff --git a/resources/definitions/creatable_d3.def.json b/resources/definitions/creatable_d3.def.json
index 1491089e24..f621bcbe97 100644
--- a/resources/definitions/creatable_d3.def.json
+++ b/resources/definitions/creatable_d3.def.json
@@ -27,14 +27,12 @@
"machine_max_feedrate_z": { "default_value": 300 },
"gantry_height": {"value": "43"},
"layer_height": { "default_value": 0.1 },
- "relative_extrusion": { "default_value": false },
+ "relative_extrusion": { "value": "False" },
"retraction_combing": { "default_value": "off" },
- "retraction_hop_enabled": { "default_value": true },
+ "retraction_hop_enabled": { "default_value": true },
"retraction_hop_only_when_collides": { "default_value": false },
- "retraction_retract_speed": { "default_value": 100 },
"retraction_speed": { "default_value": 100 },
"retraction_amount": { "default_value": 4.5 },
- "retraction_prime_speed": { "default_value": 45 },
"machine_start_gcode": {
"default_value": "G21\nG90\nM82\nM106 S255\nG28\nG92 E0\nG1 Z100 F5000\nM190 S50\nM109 S200\nG1 X-135\nG1 Z0.3\nG92 E-32\nG1 E0 F1000\nG1 E50 F200\nG1 F1000\nG1 X-125\nG92 E0"
},
diff --git a/resources/definitions/cubicon_3dp_110f.def.json b/resources/definitions/cubicon_3dp_110f.def.json
index 168b57cd66..eecfdd5911 100644
--- a/resources/definitions/cubicon_3dp_110f.def.json
+++ b/resources/definitions/cubicon_3dp_110f.def.json
@@ -1,5 +1,4 @@
{
- "id": "3DP-110F",
"version": 2,
"name": "Cubicon Single",
"inherits": "cubicon_common",
diff --git a/resources/definitions/cubicon_3dp_210f.def.json b/resources/definitions/cubicon_3dp_210f.def.json
index cc99899f92..5d8ff78487 100644
--- a/resources/definitions/cubicon_3dp_210f.def.json
+++ b/resources/definitions/cubicon_3dp_210f.def.json
@@ -1,5 +1,4 @@
{
- "id": "3DP-210F",
"version": 2,
"name": "Cubicon Style",
"inherits": "cubicon_common",
diff --git a/resources/definitions/cubicon_3dp_310f.def.json b/resources/definitions/cubicon_3dp_310f.def.json
index 90d0e3f25c..1dc78f0ebf 100644
--- a/resources/definitions/cubicon_3dp_310f.def.json
+++ b/resources/definitions/cubicon_3dp_310f.def.json
@@ -1,5 +1,4 @@
{
- "id": "3DP-310F",
"version": 2,
"name": "Cubicon Single Plus",
"inherits": "cubicon_common",
diff --git a/resources/definitions/cubicon_common.def.json b/resources/definitions/cubicon_common.def.json
index ae085c7552..6b1e3d953e 100644
--- a/resources/definitions/cubicon_common.def.json
+++ b/resources/definitions/cubicon_common.def.json
@@ -23,77 +23,34 @@
"travel_compensate_overlapping_walls_enabled": {
"default_value": false
},
- "travel_compensate_overlapping_walls_0_enabled": {
- "default_value": false
- },
- "travel_compensate_overlapping_walls_x_enabled": {
- "default_value": false
- },
"layer_height": {
"default_value": 0.2
},
"layer_height_0": {
"default_value": 0.2
},
- "infill_line_width": {
- "default_value": 0.6
- },
"adhesion_type": {
"default_value": "raft"
},
- "roofing_pattern": { "default_value": "lines" },
"top_bottom_pattern": { "default_value": "lines" },
- "top_bottom_pattern_0": {
- "default_value": "zigzag"
- },
"fill_perimeter_gaps": { "default_value": "everywhere" },
- "infill_pattern": {
- "default_value": "zigzag"
- },
"infill_sparse_density": { "default_value": 20 },
- "infill_overlap": {
- "default_value": 15
- },
"infill_before_walls": { "default_value": false },
- "infill_sparse_thickness": { "default_value": 0.2 },
"top_bottom_thickness": {
"default_value": 1.0
},
- "top_thickness": {
- "default_value": 1.0
- },
"bottom_thickness": {
- "default_value": 0.6,
"value": "top_bottom_thickness * 0.6"
},
- "roofing_layer_count": {
- "default_value": 1
- },
- "skin_preshrink": { "default_value": true },
"material_flow_layer_0": { "default_value": 100 },
- "top_skin_preshrink": { "default_value": 1.2 },
- "bottom_skin_preshrink": { "default_value": 1.2 },
"max_skin_angle_for_expansion": { "default_value": 90 },
- "min_skin_width_for_expansion": { "default_value": 2.7475 },
"skin_angles": { "default_value": "[135,45]" },
- "roofing_angles": { "default_value": "[135,45]" },
"coasting_volume": { "default_value": 0.032 },
"wall_thickness": { "default_value": 1.2 },
- "wall_line_count": { "default_value": 3 },
- "speed_wall_0": { "default_value": 25 },
- "skin_overlap": { "default_value": 5 },
"cool_min_layer_time_fan_speed_max": { "default_value": 15 },
"cool_min_layer_time": { "default_value": 15 },
- "support_roof_pattern": { "default_value": "zigzag" },
- "support_bottom_pattern": { "default_value": "zigzag" },
"support_interface_pattern": { "default_value": "zigzag" },
"support_pattern": { "default_value": "zigzag" },
- "retraction_amount": { "default_value": 1.5 },
- "top_layers": {
- "default_value": 5
- },
- "bottom_layers": {
- "default_value": 3
- }
+ "retraction_amount": { "default_value": 1.5 }
}
}
\ No newline at end of file
diff --git a/resources/definitions/dagoma_discoeasy200.def.json b/resources/definitions/dagoma_discoeasy200.def.json
index 17e285a422..30c0abdab2 100644
--- a/resources/definitions/dagoma_discoeasy200.def.json
+++ b/resources/definitions/dagoma_discoeasy200.def.json
@@ -52,9 +52,6 @@
"speed_print": {
"default_value": 60
},
- "speed_travel": {
- "default_value": 100
- },
"retraction_amount": {
"default_value": 3.5
},
diff --git a/resources/definitions/dagoma_magis.def.json b/resources/definitions/dagoma_magis.def.json
index 9d2f7170c6..dc5a0f86d2 100644
--- a/resources/definitions/dagoma_magis.def.json
+++ b/resources/definitions/dagoma_magis.def.json
@@ -55,9 +55,6 @@
"speed_print": {
"default_value": 40
},
- "speed_travel": {
- "default_value": 120
- },
"retraction_amount": {
"default_value": 3.8
},
diff --git a/resources/definitions/dagoma_neva.def.json b/resources/definitions/dagoma_neva.def.json
index ea6046b613..43a3e0c4f1 100644
--- a/resources/definitions/dagoma_neva.def.json
+++ b/resources/definitions/dagoma_neva.def.json
@@ -55,9 +55,6 @@
"speed_print": {
"default_value": 40
},
- "speed_travel": {
- "default_value": 120
- },
"retraction_amount": {
"default_value": 3.8
},
diff --git a/resources/definitions/delta_go.def.json b/resources/definitions/delta_go.def.json
index cd1fb180c2..04f0580898 100644
--- a/resources/definitions/delta_go.def.json
+++ b/resources/definitions/delta_go.def.json
@@ -16,12 +16,8 @@
"overrides": {
"machine_name": { "default_value": "Delta Go" },
"default_material_print_temperature": { "default_value": 210 },
- "speed_travel": { "default_value": 150 },
"prime_tower_size": { "default_value": 8.66 },
"infill_sparse_density": { "default_value": 10 },
- "speed_wall_x": { "default_value": 30 },
- "speed_wall_0": { "default_value": 30 },
- "speed_topbottom": { "default_value": 20 },
"layer_height": { "default_value": 0.15 },
"speed_print": { "default_value": 30 },
"machine_heated_bed": { "default_value": false },
diff --git a/resources/definitions/deltabot.def.json b/resources/definitions/deltabot.def.json
index 613b61d32c..ad6a207bb2 100644
--- a/resources/definitions/deltabot.def.json
+++ b/resources/definitions/deltabot.def.json
@@ -15,15 +15,10 @@
},
"overrides": {
- "speed_travel": { "default_value": 150 },
"prime_tower_size": { "default_value": 8.660254037844387 },
"infill_sparse_density": { "default_value": 10 },
- "speed_wall_x": { "default_value": 30 },
- "speed_wall_0": { "default_value": 30 },
- "speed_topbottom": { "default_value": 30 },
"layer_height": { "default_value": 0.2 },
"speed_print": { "default_value": 30 },
- "speed_infill": { "default_value": 30 },
"machine_extruder_count": { "default_value": 1 },
"machine_heated_bed": { "default_value": true },
"machine_center_is_zero": { "default_value": true },
diff --git a/resources/definitions/deltacomb.def.json b/resources/definitions/deltacomb.def.json
index c46beeec2d..ac2ea5abe1 100755
--- a/resources/definitions/deltacomb.def.json
+++ b/resources/definitions/deltacomb.def.json
@@ -37,7 +37,7 @@
"retraction_amount" : { "default_value": 3.5 },
"retraction_speed" : { "default_value": 30 },
"retraction_combing" : { "default_value": "noskin" },
- "travel_avoid_distance": { "default_value": 1, "value": "1" },
+ "travel_avoid_distance": { "value": "1" },
"speed_print" : { "default_value": 80 },
"speed_infill": { "value": "round(speed_print * 1.05, 0)" },
"speed_topbottom": { "value": "round(speed_print * 0.95, 0)" },
@@ -45,7 +45,7 @@
"speed_wall_0": { "value": "30" },
"speed_wall_x": { "value": "speed_wall" },
"speed_layer_0": { "value": "min(round(speed_print * 0.75, 0), 45.0)" },
- "speed_travel": { "default_value": 150, "value": 150 },
+ "speed_travel": { "value": 150 },
"speed_travel_layer_0": { "value": "round(speed_travel * 0.7, 0)" },
"skirt_brim_speed": { "value": "speed_layer_0" },
"skirt_line_count": { "default_value": 3 },
@@ -57,10 +57,10 @@
"support_z_distance": { "value": "layer_height * 2" },
"support_bottom_distance": { "value": "layer_height" },
"support_use_towers" : { "default_value": false },
- "jerk_enabled": { "default_value": 1, "value": "1" },
- "jerk_infill" : { "default_value": 5, "value": "5" },
- "jerk_support" : { "default_value": 5, "value": "5" },
- "acceleration_enabled": { "default_value": 1, "value": "1" },
+ "jerk_enabled": { "value": "True" },
+ "jerk_infill" : { "value": "5" },
+ "jerk_support" : { "value": "5" },
+ "acceleration_enabled": { "value": "1" },
"acceleration_travel" : { "value": 5000 },
"machine_max_feedrate_z" : { "default_value": 300 }
}
diff --git a/resources/definitions/easyarts_ares.def.json b/resources/definitions/easyarts_ares.def.json
index 0e2742f484..18d73a3531 100644
--- a/resources/definitions/easyarts_ares.def.json
+++ b/resources/definitions/easyarts_ares.def.json
@@ -49,27 +49,9 @@
"top_bottom_thickness": {
"default_value": 1
},
- "bottom_thickness": {
- "default_value": 1
- },
"speed_print": {
"default_value": 75
},
- "speed_infill": {
- "default_value": 100
- },
- "speed_wall": {
- "default_value": 25
- },
- "speed_topbottom": {
- "default_value": 15
- },
- "speed_travel": {
- "default_value": 150
- },
- "speed_layer_0": {
- "default_value": 30
- },
"support_enable": {
"default_value": true
}
diff --git a/resources/definitions/erzay3d.def.json b/resources/definitions/erzay3d.def.json
index 0a6d676bea..875aea708e 100644
--- a/resources/definitions/erzay3d.def.json
+++ b/resources/definitions/erzay3d.def.json
@@ -56,57 +56,17 @@
"ironing_pattern": { "default_value": "concentric" },
"ironing_flow": { "default_value": 7.0 },
- "roofing_pattern": { "default_value": "concentric" },
"infill_sparse_density": { "default_value": 20 },
- "infill_line_distance": { "default_value": 4 },
"default_material_print_temperature": { "default_value": 220 },
- "material_print_temperature": { "default_value": 220 },
- "material_print_temperature_layer_0": { "default_value": 220 },
- "material_initial_print_temperature": { "default_value": 220 },
- "material_final_print_temperature": { "default_value": 220 },
"retraction_amount": { "default_value": 6.5 },
"speed_print": { "default_value": 40 },
- "speed_infill": { "default_value": 60 },
- "speed_wall": { "default_value": 20 },
- "speed_wall_0": { "default_value": 20 },
- "speed_wall_x": { "default_value": 40 },
- "speed_roofing": { "default_value": 20 },
- "speed_topbottom": { "default_value": 20 },
- "speed_support": { "default_value": 40 },
- "speed_support_infill": { "default_value": 40 },
- "speed_support_interface": { "default_value": 25 },
- "speed_support_roof": { "default_value": 25 },
- "speed_support_bottom": { "default_value": 25 },
- "speed_prime_tower": { "default_value": 40 },
- "speed_travel": { "default_value": 100 },
- "speed_layer_0": { "default_value": 20 },
- "speed_print_layer_0": { "default_value": 20 },
- "speed_travel_layer_0": { "default_value": 80 },
- "skirt_brim_speed": { "default_value": 20 },
"speed_equalize_flow_enabled": { "default_value": true },
"speed_equalize_flow_max": { "default_value": 100 },
"acceleration_print": { "default_value": 1000 },
- "acceleration_infill": { "default_value": 3000 },
- "acceleration_wall": { "default_value": 1000 },
- "acceleration_wall_0": { "default_value": 1000 },
- "acceleration_wall_x": { "default_value": 1000 },
- "acceleration_roofing": { "default_value": 1000 },
- "acceleration_topbottom": { "default_value": 1000 },
- "acceleration_support": { "default_value": 1000 },
- "acceleration_support_infill": { "default_value": 1000 },
- "acceleration_support_interface": { "default_value": 1000 },
- "acceleration_support_roof": { "default_value": 1000 },
- "acceleration_support_bottom": { "default_value": 1000 },
- "acceleration_prime_tower": { "default_value": 1000 },
- "acceleration_travel": { "default_value": 1500 },
- "acceleration_layer_0": { "default_value": 1000 },
- "acceleration_print_layer_0": { "default_value": 1000 },
- "acceleration_travel_layer_0": { "default_value": 1000 },
- "acceleration_skirt_brim": { "default_value": 1000 },
"jerk_print": { "default_value": 10 },
diff --git a/resources/definitions/fabtotum.def.json b/resources/definitions/fabtotum.def.json
index 959a5bdaec..355f6a1434 100644
--- a/resources/definitions/fabtotum.def.json
+++ b/resources/definitions/fabtotum.def.json
@@ -50,8 +50,8 @@
"retraction_hop_enabled": { "default_value": false },
"material_final_print_temperature": { "value": "material_print_temperature - 5" },
"material_initial_print_temperature": { "value": "material_print_temperature" },
- "travel_avoid_distance": { "default_value": 1, "value": 1 },
- "speed_travel": { "default_value": 200, "value": 200 },
+ "travel_avoid_distance": { "value": 1 },
+ "speed_travel": { "value": 200 },
"speed_infill": { "value": "round(speed_print * 1.05, 0)" },
"speed_topbottom": { "value": "round(speed_print * 0.95, 0)" },
"speed_wall": { "value": "speed_print" },
diff --git a/resources/definitions/fdmextruder.def.json b/resources/definitions/fdmextruder.def.json
index fcde530ebf..9d1e3c305e 100644
--- a/resources/definitions/fdmextruder.def.json
+++ b/resources/definitions/fdmextruder.def.json
@@ -6,7 +6,7 @@
"type": "extruder",
"author": "Ultimaker",
"manufacturer": "Unknown",
- "setting_version": 10,
+ "setting_version": 11,
"visible": false,
"position": "0"
},
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 211fdf74f3..1c84e99d24 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -7,10 +7,12 @@
"author": "Ultimaker",
"category": "Other",
"manufacturer": "Unknown",
- "setting_version": 10,
+ "setting_version": 11,
"file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g",
"visible": false,
"has_materials": true,
+ "has_variants": false,
+ "has_machine_quality": false,
"preferred_material": "generic_pla",
"preferred_quality_type": "normal",
"machine_extruder_trains":
@@ -385,6 +387,16 @@
"settable_per_extruder": false,
"settable_per_meshgroup": false
},
+ "machine_extruders_share_heater":
+ {
+ "label": "Extruders Share Heater",
+ "description": "Whether the extruders share a single heater rather than each extruder having its own heater.",
+ "type": "bool",
+ "default_value": false,
+ "settable_per_mesh": false,
+ "settable_per_extruder": false,
+ "settable_per_meshgroup": false
+ },
"machine_disallowed_areas":
{
"label": "Disallowed Areas",
@@ -409,34 +421,6 @@
"settable_per_extruder": false,
"settable_per_meshgroup": false
},
- "machine_head_polygon":
- {
- "label": "Machine Head Polygon",
- "description": "A 2D silhouette of the print head (fan caps excluded).",
- "type": "polygon",
- "default_value":
- [
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ]
- ],
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": false
- },
"machine_head_with_fans_polygon":
{
"label": "Machine Head & Fan Polygon",
@@ -1188,6 +1172,18 @@
"value": "999999 if infill_sparse_density == 100 else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
+ },
+ "initial_bottom_layers":
+ {
+ "label": "Initial Bottom Layers",
+ "description": "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number.",
+ "minimum_value": "0",
+ "minimum_value_warning": "2",
+ "default_value": 6,
+ "type": "int",
+ "value": "bottom_layers",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
}
}
}
@@ -2158,7 +2154,7 @@
"minimum_value": "-273.15",
"minimum_value_warning": "material_standby_temperature",
"maximum_value_warning": "material_print_temperature",
- "enabled": "machine_nozzle_temp_enabled",
+ "enabled": "machine_nozzle_temp_enabled and not machine_extruders_share_heater",
"settable_per_mesh": false,
"settable_per_extruder": true
},
@@ -2173,7 +2169,7 @@
"minimum_value": "-273.15",
"minimum_value_warning": "material_standby_temperature",
"maximum_value_warning": "material_print_temperature",
- "enabled": "machine_nozzle_temp_enabled",
+ "enabled": "machine_nozzle_temp_enabled and not machine_extruders_share_heater",
"settable_per_mesh": false,
"settable_per_extruder": true
},
@@ -2341,6 +2337,20 @@
"settable_per_mesh": false,
"settable_per_extruder": true
},
+ "material_break_preparation_temperature":
+ {
+ "label": "Break Preparation Temperature",
+ "description": "The temperature used to purge material, should be roughly equal to the highest possible printing temperature.",
+ "type": "float",
+ "unit": "°C",
+ "default_value": 50,
+ "value": "material_print_temperature",
+ "enabled": false,
+ "minimum_value": "-273.15",
+ "maximum_value_warning": "300",
+ "settable_per_mesh": false,
+ "settable_per_extruder": true
+ },
"material_break_retracted_position":
{
"label": "Break Retracted Position",
@@ -2699,7 +2709,6 @@
"minimum_value": "0",
"minimum_value_warning": "line_width * 1.5",
"maximum_value_warning": "10",
- "enabled": false,
"settable_per_mesh": false,
"settable_per_extruder": true
},
@@ -4069,7 +4078,7 @@
"description": "The extruder train to use for printing the support. This is used in multi-extrusion.",
"type": "extruder",
"default_value": "0",
- "value": "defaultExtruderPosition()",
+ "value": "int(defaultExtruderPosition())",
"enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
"settable_per_mesh": false,
"settable_per_extruder": false,
@@ -5036,7 +5045,7 @@
"description": "The extruder train to use for printing the skirt/brim/raft. This is used in multi-extrusion.",
"type": "extruder",
"default_value": "0",
- "value": "defaultExtruderPosition()",
+ "value": "int(defaultExtruderPosition())",
"enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') != 'none' or resolveOrValue('prime_tower_brim_enable'))",
"settable_per_mesh": false,
"settable_per_extruder": false
@@ -5831,6 +5840,18 @@
"settable_per_mesh": false,
"settable_per_extruder": false
},
+ "meshfix_maximum_resolution":
+ {
+ "label": "Maximum Resolution",
+ "description": "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway.",
+ "type": "float",
+ "unit": "mm",
+ "default_value": 0.5,
+ "minimum_value": "0.001",
+ "minimum_value_warning": "0.01",
+ "maximum_value_warning": "3",
+ "settable_per_mesh": true
+ },
"meshfix_maximum_travel_resolution":
{
"label": "Maximum Travel Resolution",
@@ -6215,6 +6236,7 @@
"label": "Infill Travel Optimization",
"description": "When enabled, the order in which the infill lines are printed is optimized to reduce the distance travelled. The reduction in travel time achieved very much depends on the model being sliced, infill pattern, density, etc. Note that, for some models that have many small areas of infill, the time to slice the model may be greatly increased.",
"type": "bool",
+ "enabled": "resolveOrValue('retraction_combing') != 'off'",
"default_value": false,
"settable_per_mesh": true
},
@@ -6252,18 +6274,6 @@
"settable_per_mesh": true,
"settable_per_extruder": false
},
- "meshfix_maximum_resolution":
- {
- "label": "Maximum Resolution",
- "description": "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway.",
- "type": "float",
- "unit": "mm",
- "default_value": 0.5,
- "minimum_value": "0.001",
- "minimum_value_warning": "0.01",
- "maximum_value_warning": "3",
- "settable_per_mesh": true
- },
"support_skip_some_zags":
{
"label": "Break Up Support In Chunks",
@@ -6426,16 +6436,6 @@
"settable_per_mesh": false,
"settable_per_extruder": true
},
- "skin_alternate_rotation":
- {
- "label": "Alternate Skin Rotation",
- "description": "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions.",
- "type": "bool",
- "default_value": false,
- "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
"cross_infill_pocket_size":
{
"label": "Cross 3D Pocket Size",
@@ -6592,7 +6592,7 @@
"minimum_value_warning": "machine_nozzle_size * 3",
"maximum_value_warning": "100.0",
"type": "float",
- "enabled": "support_conical_enabled and support_enable",
+ "enabled": "support_conical_enabled and support_enable and support_conical_angle > 0",
"limit_to_extruder": "support_infill_extruder_nr",
"settable_per_mesh": true
},
@@ -6653,30 +6653,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
@@ -6699,7 +6695,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,
@@ -6729,7 +6725,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",
@@ -6745,11 +6741,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
@@ -6761,7 +6757,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",
@@ -6777,7 +6773,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",
@@ -6793,7 +6789,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",
@@ -6916,7 +6912,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
@@ -6930,7 +6926,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
@@ -6944,7 +6940,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
@@ -7067,17 +7063,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
@@ -7139,6 +7136,17 @@
"enabled": "bridge_settings_enabled",
"settable_per_mesh": true
},
+ "bridge_sparse_infill_max_density":
+ {
+ "label": "Bridge Sparse Infill Max Density",
+ "description": "Maximum density of infill considered to be sparse. Skin over sparse infill is considered to be unsupported and so may be treated as a bridge skin.",
+ "unit": "%",
+ "type": "float",
+ "default_value": 0,
+ "minimum_value": "0",
+ "enabled": "bridge_settings_enabled",
+ "settable_per_mesh": true
+ },
"bridge_wall_coast":
{
"label": "Bridge Wall Coasting",
@@ -7373,6 +7381,7 @@
"description": "Retract the filament when the nozzle is moving over a non-printed area.",
"type": "bool",
"default_value": true,
+ "value": "retraction_enable",
"enabled": "clean_between_layers",
"settable_per_mesh": false,
"settable_per_extruder": true,
@@ -7385,6 +7394,7 @@
"unit": "mm",
"type": "float",
"default_value": 1,
+ "value": "retraction_amount",
"minimum_value_warning": "-0.0001",
"maximum_value_warning": "10.0",
"enabled": "wipe_retraction_enable and clean_between_layers",
@@ -7399,6 +7409,7 @@
"unit": "mm³",
"type": "float",
"default_value": 0,
+ "value": "retraction_extra_prime_amount",
"minimum_value_warning": "-0.0001",
"maximum_value_warning": "10.0",
"enabled": "wipe_retraction_enable and clean_between_layers",
@@ -7412,6 +7423,7 @@
"unit": "mm/s",
"type": "float",
"default_value": 5,
+ "value": "retraction_speed",
"minimum_value": "0",
"minimum_value_warning": "1",
"maximum_value": "machine_max_feedrate_e",
@@ -7433,13 +7445,13 @@
"minimum_value_warning": "1",
"maximum_value_warning": "70",
"enabled": "wipe_retraction_enable and clean_between_layers",
- "value": "retraction_speed",
+ "value": "wipe_retraction_speed",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"wipe_retraction_prime_speed":
{
- "label": "Retraction Prime Speed",
+ "label": "Wipe Retraction Prime Speed",
"description": "The speed at which the filament is primed during a wipe retraction move.",
"unit": "mm/s",
"type": "float",
@@ -7449,7 +7461,7 @@
"minimum_value_warning": "1",
"maximum_value_warning": "70",
"enabled": "wipe_retraction_enable and clean_between_layers",
- "value": "retraction_speed",
+ "value": "wipe_retraction_speed",
"settable_per_mesh": false,
"settable_per_extruder": true
}
@@ -7470,10 +7482,11 @@
},
"wipe_hop_enable":
{
- "label": "Wipe Z Hop When Retracted",
- "description": "Whenever a retraction is done, the build plate is lowered to create clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate.",
+ "label": "Wipe Z Hop",
+ "description": "When wiping, the build plate is lowered to create clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate.",
"type": "bool",
"default_value": true,
+ "value": "retraction_hop_enabled",
"enabled": "clean_between_layers",
"settable_per_mesh": false,
"settable_per_extruder": true,
@@ -7486,6 +7499,7 @@
"unit": "mm",
"type": "float",
"default_value": 1,
+ "value": "retraction_hop",
"enabled": "wipe_hop_enable and clean_between_layers",
"settable_per_mesh": false,
"settable_per_extruder": true,
@@ -7497,7 +7511,8 @@
"description": "Speed to move the z-axis during the hop.",
"unit": "mm/s",
"type": "float",
- "default_value": 100,
+ "default_value": 10,
+ "value": "speed_z_hop",
"minimum_value": "0",
"minimum_value_warning": "1",
"enabled": "wipe_hop_enable and clean_between_layers",
@@ -7550,18 +7565,21 @@
"type": "float",
"minimum_value": "0",
"default_value": 0,
- "settable_per_mesh": true
- },
- "small_feature_max_length":
- {
- "label": "Small Feature Max Length",
- "description": "Feature outlines that are shorter than this length will be printed using Small Feature Speed.",
- "unit": "mm",
- "type": "float",
- "minimum_value": "0",
- "default_value": 0,
- "value": "small_hole_max_size * math.pi",
- "settable_per_mesh": true
+ "settable_per_mesh": true,
+ "children":
+ {
+ "small_feature_max_length":
+ {
+ "label": "Small Feature Max Length",
+ "description": "Feature outlines that are shorter than this length will be printed using Small Feature Speed.",
+ "unit": "mm",
+ "type": "float",
+ "minimum_value": "0",
+ "default_value": 0,
+ "value": "small_hole_max_size * math.pi",
+ "settable_per_mesh": true
+ }
+ }
},
"small_feature_speed_factor":
{
@@ -7577,7 +7595,7 @@
},
"small_feature_speed_factor_0":
{
- "label": "First Layer Speed",
+ "label": "Small Feature Initial Layer Speed",
"description": "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy.",
"unit": "%",
"type": "float",
diff --git a/resources/definitions/felixpro2dual.def.json b/resources/definitions/felixpro2dual.def.json
index 0c978cdb71..fdd8a1b694 100644
--- a/resources/definitions/felixpro2dual.def.json
+++ b/resources/definitions/felixpro2dual.def.json
@@ -24,7 +24,6 @@
"layer_height": { "default_value": 0.15 },
"layer_height_0": { "default_value": 0.2 },
- "speed_layer_0": { "default_value": 20},
"infill_sparse_density": { "default_value": 20 },
"wall_thickness": { "default_value": 1 },
@@ -53,7 +52,6 @@
"machine_center_is_zero": { "default_value": false },
"speed_print": { "default_value": 80 },
- "speed_travel": { "default_value": 200 },
"retraction_amount": { "default_value": 1 },
"retraction_speed": { "default_value": 50},
diff --git a/resources/definitions/felixtec4dual.def.json b/resources/definitions/felixtec4dual.def.json
index ba5bcfa112..efc13c1759 100644
--- a/resources/definitions/felixtec4dual.def.json
+++ b/resources/definitions/felixtec4dual.def.json
@@ -39,7 +39,6 @@
"machine_center_is_zero": { "default_value": false },
"speed_print": { "default_value": 60 },
- "speed_travel": { "default_value": 200 },
"retraction_amount": { "default_value": 1 },
"retraction_speed": { "default_value": 50},
diff --git a/resources/definitions/flsun_qq_s.def.json b/resources/definitions/flsun_qq_s.def.json
index 5a739e9ae1..9c3bf571ae 100644
--- a/resources/definitions/flsun_qq_s.def.json
+++ b/resources/definitions/flsun_qq_s.def.json
@@ -1,5 +1,4 @@
{
- "id": "flsun_qq_s",
"version": 2,
"name": "FLSUN QQ-S",
"inherits": "fdmprinter",
@@ -33,14 +32,8 @@
"z_seam_type": {
"default_value": "back"
},
- "top_thickness": {
- "default_value": 5
- },
- "bottom_layers": {
- "default_value": 4
- },
"gantry_height": {
- "default_value": 0
+ "value": "0"
},
"machine_nozzle_size": {
"default_value": 0.4
diff --git a/resources/definitions/geeetech_a30.def.json b/resources/definitions/geeetech_a30.def.json
index 3d8823f438..1f08d37445 100644
--- a/resources/definitions/geeetech_a30.def.json
+++ b/resources/definitions/geeetech_a30.def.json
@@ -1,5 +1,4 @@
{
- "id": "geeetech_a30",
"version": 2,
"name": "Geeetech A30",
"inherits": "fdmprinter",
@@ -42,9 +41,6 @@
"material_diameter": {
"default_value": 1.75
},
- "material_bed_temperature": {
- "default_value": 60
- },
"machine_nozzle_size": {
"default_value": 0.4
},
@@ -60,23 +56,9 @@
"retraction_speed": {
"default_value": 25
},
- "retraction_retract_speed": {
- "default_value": 25
- },
- "retraction_prime_speed": {
- "default_value": 25
- },
"adhesion_type": {
"default_value": "skirt"
},
- "machine_head_polygon": {
- "default_value": [
- [-75, 35],
- [18, 35],
- [18, -18],
- [-75, -18]
- ]
- },
"machine_head_with_fans_polygon": {
"default_value": [
[-75, 35],
@@ -86,7 +68,7 @@
]
},
"gantry_height": {
- "default_value": 55
+ "value": "55"
},
"machine_max_feedrate_x": {
"default_value": 300
diff --git a/resources/definitions/gmax15plus.def.json b/resources/definitions/gmax15plus.def.json
index eb576f0e19..e98d6c02fe 100644
--- a/resources/definitions/gmax15plus.def.json
+++ b/resources/definitions/gmax15plus.def.json
@@ -1,5 +1,4 @@
{
- "id": "gmax15plus",
"version": 2,
"name": "gMax 1.5 Plus",
"inherits": "fdmprinter",
@@ -39,7 +38,6 @@
"adhesion_type": { "default_value": "skirt" },
"gantry_height": { "value": "50" },
"speed_print": { "default_value": 50 },
- "speed_travel": { "default_value": 70 },
"machine_max_acceleration_x": { "default_value": 600 },
"machine_max_acceleration_y": { "default_value": 600 },
"machine_max_acceleration_z": { "default_value": 30 },
@@ -50,9 +48,7 @@
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home X/Y/Z\nM104 S{material_print_temperature} ; Preheat\nM109 S{material_print_temperature} ; Preheat\nG91 ;relative positioning\nG90 ;absolute positioning\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." },
"machine_end_gcode": { "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" },
- "material_print_temperature": { "default_value": 202 },
"wall_thickness": { "default_value": 1 },
- "top_bottom_thickness": { "default_value": 1 },
- "bottom_thickness": { "default_value": 1 }
+ "top_bottom_thickness": { "default_value": 1 }
}
}
diff --git a/resources/definitions/gmax15plus_dual.def.json b/resources/definitions/gmax15plus_dual.def.json
index 40a3dde303..aaba2cc55b 100644
--- a/resources/definitions/gmax15plus_dual.def.json
+++ b/resources/definitions/gmax15plus_dual.def.json
@@ -1,5 +1,4 @@
{
- "id": "gmax15plus_dual",
"version": 2,
"name": "gMax 1.5 Plus Dual Extruder",
"inherits": "fdmprinter",
@@ -37,7 +36,6 @@
"adhesion_type": { "default_value": "skirt" },
"gantry_height": { "value": "50" },
"speed_print": { "default_value": 50 },
- "speed_travel": { "default_value": 70 },
"machine_max_acceleration_x": { "default_value": 600 },
"machine_max_acceleration_y": { "default_value": 600 },
"machine_max_acceleration_z": { "default_value": 30 },
@@ -48,9 +46,7 @@
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home X/Y/Z\nM104 S{material_print_temperature} T0 ; Preheat Left Extruder\nM104 S{material_print_temperature} T1 ; Preheat Right Extruder\nM109 S{material_print_temperature} T0 ; Preheat Left Extruder\nM109 S{material_print_temperature} T1 ; Preheat Right Extruder\nG91 ;relative positioning\nG90 ;absolute positioning\nM218 T1 X34.3 Y0; Set 2nd extruder offset. This can be changed later if needed\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." },
"machine_end_gcode": { "default_value": "M104 S0 T0;Left extruder off\nM104 S0 T1; Right extruder off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" },
- "material_print_temperature": { "default_value": 202 },
"wall_thickness": { "default_value": 1 },
- "top_bottom_thickness": { "default_value": 1 },
- "bottom_thickness": { "default_value": 1 }
+ "top_bottom_thickness": { "default_value": 1 }
}
}
diff --git a/resources/definitions/grr_neo.def.json b/resources/definitions/grr_neo.def.json
index b3a558825a..774a3e614c 100644
--- a/resources/definitions/grr_neo.def.json
+++ b/resources/definitions/grr_neo.def.json
@@ -28,7 +28,7 @@
"machine_center_is_zero": {
"default_value": false
},
- "machine_head_polygon": {
+ "machine_head_with_fans_polygon": {
"default_value": [
[-75, -18],
[-75, 35],
diff --git a/resources/definitions/helloBEEprusa.def.json b/resources/definitions/helloBEEprusa.def.json
index 65716ac175..2c8c4839d0 100644
--- a/resources/definitions/helloBEEprusa.def.json
+++ b/resources/definitions/helloBEEprusa.def.json
@@ -26,28 +26,15 @@
"machine_height": { "default_value": 190 },
"machine_heated_bed": { "default_value": true },
"machine_center_is_zero": { "default_value": false },
- "material_print_temperature": { "default_value": 200 },
- "material_bed_temperature": { "default_value": 60 },
- "line_width": { "default_value": 0.48 },
"layer_height": { "default_value": 0.2 },
"layer_height_0": { "default_value": 0.2 },
- "wall_line_count": { "default_value": 3 },
"wall_thickness": { "default_value": 1.2 },
"top_bottom_thickness": { "default_value": 1.2 },
"infill_sparse_density": { "default_value": 20 },
- "infill_overlap": { "default_value": 15 },
"speed_print": { "default_value": 60 },
- "speed_travel": { "default_value": 160 },
- "speed_layer_0": { "default_value": 30 },
- "speed_wall_x": { "default_value": 35 },
- "speed_wall_0": { "default_value": 30 },
- "speed_infill": { "default_value": 60 },
- "speed_topbottom": { "default_value": 20 },
- "skirt_brim_speed": { "default_value": 35 },
"skirt_line_count": { "default_value": 4 },
"skirt_brim_minimal_length": { "default_value": 30 },
"skirt_gap": { "default_value": 6 },
- "cool_fan_full_at_height": { "default_value": 0.4 },
"retraction_speed": { "default_value": 15.0},
"retraction_amount": { "default_value": 1.5}
}
diff --git a/resources/definitions/hms434.def.json b/resources/definitions/hms434.def.json
index 1901f87824..ca031f26bf 100644
--- a/resources/definitions/hms434.def.json
+++ b/resources/definitions/hms434.def.json
@@ -9,7 +9,6 @@
"file_formats": "text/x-gcode",
"has_materials": true,
- "has_machine_materials": true,
"preferred_material": "generic_pla",
"exclude_materials": [
"chromatik_pla",
diff --git a/resources/definitions/innovo_inventor.def.json b/resources/definitions/innovo_inventor.def.json
index 72a9ec3edb..df839b0fe4 100644
--- a/resources/definitions/innovo_inventor.def.json
+++ b/resources/definitions/innovo_inventor.def.json
@@ -32,7 +32,7 @@
"machine_center_is_zero": {
"default_value": true
},
- "machine_head_polygon": {
+ "machine_head_with_fans_polygon": {
"default_value": [
[-43.7, -19.2],
[-43.7, 55],
@@ -61,36 +61,10 @@
"top_bottom_thickness": {
"default_value": 1.2
},
- "material_print_temperature": {
- "default_value": 205
- },
- "material_bed_temperature": {
- "default_value": 60
- },
"speed_print": {
"default_value": 50
},
- "speed_wall_0": {
- "default_value": 25
- },
- "speed_wall_x": {
- "default_value": 40
- },
- "speed_infill": {
- "default_value": 80
- },
- "speed_topbottom": {
- "default_value": 30
- },
- "speed_support_interface":
- {
- "default_value": 20
- },
- "speed_travel": {
- "default_value": 150
- },
"speed_layer_0": {
- "default_value": 30.0,
"minimum_value": 0.1
}
}
diff --git a/resources/definitions/jgaurora_a1.def.json b/resources/definitions/jgaurora_a1.def.json
index 3c9f9c61e9..1c910f0d95 100644
--- a/resources/definitions/jgaurora_a1.def.json
+++ b/resources/definitions/jgaurora_a1.def.json
@@ -47,12 +47,6 @@
"material_diameter": {
"default_value": 1.75
},
- "material_print_temperature": {
- "default_value": 215
- },
- "material_bed_temperature": {
- "default_value": 67
- },
"layer_height_0": {
"default_value": 0.12
},
@@ -62,21 +56,6 @@
"speed_print": {
"default_value": 40
},
- "speed_infill": {
- "default_value": 40
- },
- "speed_wall": {
- "default_value": 35
- },
- "speed_topbottom": {
- "default_value": 35
- },
- "speed_travel": {
- "default_value": 120
- },
- "speed_layer_0": {
- "default_value": 12
- },
"support_enable": {
"default_value": true
},
diff --git a/resources/definitions/jgaurora_a3s.def.json b/resources/definitions/jgaurora_a3s.def.json
index bd8d0bd0e3..ead0a5f9e7 100644
--- a/resources/definitions/jgaurora_a3s.def.json
+++ b/resources/definitions/jgaurora_a3s.def.json
@@ -47,12 +47,6 @@
"material_diameter": {
"default_value": 1.75
},
- "material_print_temperature": {
- "default_value": 210
- },
- "material_bed_temperature": {
- "default_value": 65
- },
"layer_height_0": {
"default_value": 0.12
},
@@ -62,21 +56,6 @@
"speed_print": {
"default_value": 35
},
- "speed_infill": {
- "default_value": 40
- },
- "speed_wall": {
- "default_value": 30
- },
- "speed_topbottom": {
- "default_value": 20
- },
- "speed_travel": {
- "default_value": 100
- },
- "speed_layer_0": {
- "default_value": 12
- },
"support_enable": {
"default_value": true
},
diff --git a/resources/definitions/jgaurora_a5.def.json b/resources/definitions/jgaurora_a5.def.json
index e02fca881b..b9f179d38e 100644
--- a/resources/definitions/jgaurora_a5.def.json
+++ b/resources/definitions/jgaurora_a5.def.json
@@ -49,12 +49,6 @@
"material_diameter": {
"default_value": 1.75
},
- "material_print_temperature": {
- "default_value": 215
- },
- "material_bed_temperature": {
- "default_value": 67
- },
"layer_height_0": {
"default_value": 0.12
},
@@ -64,21 +58,6 @@
"speed_print": {
"default_value": 40
},
- "speed_infill": {
- "default_value": 40
- },
- "speed_wall": {
- "default_value": 35
- },
- "speed_topbottom": {
- "default_value": 35
- },
- "speed_travel": {
- "default_value": 120
- },
- "speed_layer_0": {
- "default_value": 12
- },
"support_enable": {
"default_value": true
},
diff --git a/resources/definitions/jgaurora_jgmaker_magic.def.json b/resources/definitions/jgaurora_jgmaker_magic.def.json
index 703305151a..8d0349a48c 100644
--- a/resources/definitions/jgaurora_jgmaker_magic.def.json
+++ b/resources/definitions/jgaurora_jgmaker_magic.def.json
@@ -47,12 +47,6 @@
"material_diameter": {
"default_value": 1.75
},
- "material_print_temperature": {
- "default_value": 200
- },
- "material_bed_temperature": {
- "default_value": 60
- },
"layer_height_0": {
"default_value": 0.2
},
@@ -62,21 +56,6 @@
"speed_print": {
"default_value": 60
},
- "speed_infill": {
- "default_value": 60
- },
- "speed_wall": {
- "default_value": 30
- },
- "speed_topbottom": {
- "default_value": 45
- },
- "speed_travel": {
- "default_value": 125
- },
- "speed_layer_0": {
- "default_value": 30
- },
"support_enable": {
"default_value": true
},
diff --git a/resources/definitions/jgaurora_z_603s.def.json b/resources/definitions/jgaurora_z_603s.def.json
index ceade3243a..8dbf5a82bb 100644
--- a/resources/definitions/jgaurora_z_603s.def.json
+++ b/resources/definitions/jgaurora_z_603s.def.json
@@ -22,7 +22,7 @@
},
"machine_end_gcode": {
"default_value": "; -- END GCODE --\nM104 S0 ;turn off nozzle heater\nM140 S0 ;turn off bed heater\nG91 ;set to relative positioning\nG1 E-10 F300 ;retract the filament slightly\nG90 ;set to absolute positioning\nG28 X0 Y0 F600 ;move to the X/Y-axis origin (Home)\nM84 ;turn off stepper motors\n; -- end of END GCODE --"
- },
+ },
"machine_width": {
"default_value": 280
},
@@ -47,12 +47,6 @@
"material_diameter": {
"default_value": 1.75
},
- "material_print_temperature": {
- "default_value": 210
- },
- "material_bed_temperature": {
- "default_value": 55
- },
"layer_height_0": {
"default_value": 0.2
},
@@ -62,21 +56,6 @@
"speed_print": {
"default_value": 60
},
- "speed_infill": {
- "default_value": 60
- },
- "speed_wall": {
- "default_value": 30
- },
- "speed_topbottom": {
- "default_value": 45
- },
- "speed_travel": {
- "default_value": 125
- },
- "speed_layer_0": {
- "default_value": 20
- },
"support_enable": {
"default_value": true
},
diff --git a/resources/definitions/julia.def.json b/resources/definitions/julia.def.json
index 62e4170c1f..15e5057a55 100644
--- a/resources/definitions/julia.def.json
+++ b/resources/definitions/julia.def.json
@@ -21,25 +21,14 @@
"machine_end_gcode": {
"default_value": " M104 S0 ;extruder heater off\n M140 S0 ;heated bed heater off (if you have it)\n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning\n"
},
- "material_bed_temperature": { "default_value": 100 },
"layer_height": { "default_value": 0.2 },
"support_angle": { "default_value": 30 },
- "infill_overlap": { "default_value": 30 },
"layer_height_0": { "default_value": 0.2 },
"speed_print": { "default_value": 80 },
- "speed_wall_0": { "default_value": 30 },
- "speed_travel": { "default_value": 150 },
- "brim_line_count": { "default_value": 15 },
- "skin_overlap": { "default_value": 30 },
"prime_tower_size": { "default_value": 8.660254037844387 },
- "bottom_thickness": { "default_value": 0.8 },
"retraction_amount": { "default_value": 3 },
- "speed_topbottom": { "default_value": 80 },
- "material_print_temperature": { "default_value": 230 },
"support_pattern": { "default_value": "grid" },
- "speed_infill": { "default_value": 80 },
"infill_sparse_density": { "default_value": 10 },
- "top_thickness": { "default_value": 0.8 },
"machine_extruder_count": { "default_value": 1 },
"retraction_combing": { "default_value": "off" },
"machine_heated_bed": { "default_value": true },
diff --git a/resources/definitions/key3d_tyro.def.json b/resources/definitions/key3d_tyro.def.json
new file mode 100644
index 0000000000..0bfc78c115
--- /dev/null
+++ b/resources/definitions/key3d_tyro.def.json
@@ -0,0 +1,65 @@
+{
+ "name": "Tyro",
+ "version": 2,
+ "inherits": "fdmprinter",
+ "metadata": {
+ "visible": true,
+ "author": "DragonJe",
+ "manufacturer": "Key3D",
+ "file_formats": "text/x-gcode",
+ "platform_offset": [0, 0, 0],
+ "has_materials": true,
+ "has_variants": false,
+ "preferred_quality_type": "normal",
+ "has_machine_quality": true,
+ "preferred_material": "generic_pla",
+ "machine_extruder_trains":
+ {
+ "0": "key3d_tyro_extruder_0"
+ }
+ },
+
+ "overrides": {
+ "machine_name": {
+ "default_value": "Tyro"
+ },
+ "machine_width": {
+ "default_value": 150
+ },
+ "machine_height": {
+ "default_value": 150
+ },
+ "machine_depth": {
+ "default_value": 150
+ },
+ "machine_head_with_fans_polygon": {
+ "default_value": [
+ [-30, 34],
+ [-30, -32],
+ [30, -32],
+ [30, 34]
+ ]
+ },
+ "gantry_height": {
+ "value": "30"
+ },
+ "machine_heated_bed": {
+ "default_value": false
+ },
+ "machine_heated_build_volume": {
+ "default_value": false
+ },
+ "material_diameter": {
+ "default_value": 1.75
+ },
+ "machine_gcode_flavor": {
+ "default_value": "RepRap (Marlin/Sprinter)"
+ },
+ "machine_start_gcode": {
+ "default_value": "G28 ; Home\nG1 Z15.0 F6000 ; Move Z axis up 15mm\n ; Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0"
+ },
+ "machine_end_gcode": {
+ "default_value": "M104 S0\nM140 S0\n ; Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84"
+ }
+ }
+}
diff --git a/resources/definitions/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/leapfrog_bolt_pro.def.json b/resources/definitions/leapfrog_bolt_pro.def.json
new file mode 100644
index 0000000000..09b9ecded5
--- /dev/null
+++ b/resources/definitions/leapfrog_bolt_pro.def.json
@@ -0,0 +1,115 @@
+{
+ "version": 2,
+ "name": "Leapfrog Bolt Pro",
+ "inherits": "fdmprinter",
+ "metadata": {
+ "visible": true,
+ "author": "Karan and Vincent 20191104",
+ "manufacturer": "Leapfrog B.V.",
+ "category": "Other",
+ "platform": "leapfrog_bolt_pro_platform.stl",
+ "platform_offset": [0, 0, -14],
+ "file_formats": "text/x-gcode",
+ "supports_usb_connection": false,
+ "supports_network_connection": false,
+ "has_materials": true,
+ "has_machine_quality": true,
+ "has_variants": true,
+ "preferred_variant_name": "Brass 0.4",
+ "preferred_material": "leapfrog_epla_natural",
+ "variants_name": "Hot end",
+ "exclude_materials": [
+ "generic_pla_175",
+ "generic_abs_175",
+ "generic_cpe_175",
+ "generic_hips_175",
+ "generic_nylon_175",
+ "generic_pc_175",
+ "generic_petg_175",
+ "generic_pva_175",
+ "generic_tpu_175",
+ "chromatik_pla",
+ "dsm_arnitel2045_175",
+ "dsm_novamid1070_175",
+ "emotiontech_abs",
+ "emotiontech_petg",
+ "emotiontech_pla",
+ "emotiontech_pva-m",
+ "emotiontech_pva-oks",
+ "emotiontech_pva-s",
+ "emotiontech_tpu98a",
+ "fabtotum_abs",
+ "fabtotum_nylon",
+ "fabtotum_pla",
+ "fabtotum_tpu",
+ "fiberlogy_hd_pla",
+ "filo3d_pla",
+ "filo3d_pla_green",
+ "filo3d_pla_red",
+ "imade3d_petg_175",
+ "imade3d_pla_175",
+ "innofill_innoflex60_175",
+ "octofiber_pla",
+ "polyflex_pla",
+ "polymax_pla",
+ "polyplus_pla",
+ "polywood_pla",
+ "tizyx_abs",
+ "tizyx_pla",
+ "tizyx_flex",
+ "tizyx_petg",
+ "tizyx_pva",
+ "tizyx_pla_bois",
+ "verbatim_bvoh_175",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA_Glitter",
+ "Vertex_Delta_PLA_Mat",
+ "Vertex_Delta_PLA_Satin",
+ "Vertex_Delta_PLA_Wood",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_TPU",
+ "zyyx_pro_flex",
+ "zyyx_pro_pla"
+ ],
+ "machine_extruder_trains":
+ {
+ "0": "leapfrog_bolt_pro_extruder_right",
+ "1": "leapfrog_bolt_pro_extruder_left"
+ }
+ },
+ "overrides": {
+ "machine_name": {"default_value": "Leapfrog Bolt Pro" },
+ "machine_extruder_count": {"default_value": 2},
+ "machine_center_is_zero": {"default_value": false},
+ "machine_width": {"default_value": 302},
+ "machine_height": {"default_value": 205},
+ "machine_depth": {"default_value": 322},
+ "machine_heated_bed": {"default_value": true},
+ "machine_head_with_fans_polygon": {"default_value": [[-60, 110 ], [-60, -45], [60, -45 ], [60, 110]]},
+ "machine_max_feedrate_z": {"default_value": 16.7 },
+ "machine_max_feedrate_e": {"default_value": 50 },
+ "machine_max_acceleration_z": {"default_value": 100 },
+ "machine_acceleration": {"default_value": 400 },
+ "machine_max_jerk_xy": {"default_value": 20 },
+ "machine_max_jerk_z": {"default_value": 0.4 },
+ "machine_max_jerk_e": {"default_value": 5 },
+ "machine_gcode_flavor": {"default_value": "RepRap (Marlin/Sprinter)"},
+ "material_final_print_temperature": {"value": "default_material_print_temperature" },
+ "material_initial_print_temperature": {"value": "default_material_print_temperature" },
+ "gantry_height": {"value": "20"},
+ "retraction_combing": { "default_value": "all" },
+ "retraction_amount": {"default_value": 2},
+ "adhesion_type": {"default_value": "skirt"},
+ "skirt_line_count": {"default_value": 3},
+ "machine_use_extruder_offset_to_offset_coords": {"default_value": true},
+ "machine_start_gcode": {"default_value": "G90\nG28 X0 Y0 Z0\nG1 Z5 F1000\nG92 E0\nG1 Y-32 F12000\nG1 E15 F1000\nG1 E45 F150\nG4 S5"},
+ "machine_end_gcode": {"default_value": "G92 E0\nG1 E-3 F300\nM104 S0 T0\nM104 S0 T1\nM140 S0\nG28 X0 Y0\nM84"},
+ "prime_tower_enable": { "resolve": "extruders_enabled_count > 1"},
+ "prime_tower_position_x": {"value": "169" },
+ "prime_tower_position_y": {"value": "25" },
+ "speed_travel": { "value": "200" },
+ "build_volume_temperature": {"enabled": false},
+ "material_standby_temperature": {"enabled": false }
+ }
+}
diff --git a/resources/definitions/makeR_pegasus.def.json b/resources/definitions/makeR_pegasus.def.json
index 6b19544612..63f76194a4 100644
--- a/resources/definitions/makeR_pegasus.def.json
+++ b/resources/definitions/makeR_pegasus.def.json
@@ -32,7 +32,7 @@
"machine_center_is_zero": {
"default_value": false
},
- "machine_head_polygon": {
+ "machine_head_with_fans_polygon": {
"default_value": [
[-75, -18],
[-75, 35],
diff --git a/resources/definitions/makeR_prusa_tairona_i3.def.json b/resources/definitions/makeR_prusa_tairona_i3.def.json
index c7e7f4079d..3c57c0cbc8 100644
--- a/resources/definitions/makeR_prusa_tairona_i3.def.json
+++ b/resources/definitions/makeR_prusa_tairona_i3.def.json
@@ -32,7 +32,7 @@
"machine_center_is_zero": {
"default_value": false
},
- "machine_head_polygon": {
+ "machine_head_with_fans_polygon": {
"default_value": [
[-75, -18],
[-75, 35],
diff --git a/resources/definitions/makeblock_mcreate.def.json b/resources/definitions/makeblock_mcreate.def.json
new file mode 100644
index 0000000000..7a2d575395
--- /dev/null
+++ b/resources/definitions/makeblock_mcreate.def.json
@@ -0,0 +1,68 @@
+{
+ "version": 2,
+ "name": "Makeblock mCreate",
+ "inherits": "fdmprinter",
+ "metadata": {
+ "author": "Makeblock",
+ "manufacturer": "Makeblock",
+ "visible": true,
+ "file_formats": "application/gzip;text/x-gcode",
+ "has_machine_quality": true,
+ "preferred_quality_type": "normal",
+ "machine_extruder_trains": {
+ "0": "makeblock_mcreate_extruder_0"
+ }
+ },
+ "overrides": {
+ "machine_name": {
+ "default_value": "Makeblock mCreate"
+ },
+ "machine_width": {
+ "default_value": 225
+ },
+ "machine_depth": {
+ "default_value": 225
+ },
+ "machine_height": {
+ "default_value": 300
+ },
+ "machine_heated_bed": {
+ "default_value": true
+ },
+ "machine_head_with_fans_polygon": {
+ "default_value": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ]
+ ]
+ },
+ "machine_gcode_flavor": {
+ "default_value": "Marlin"
+ },
+ "gantry_height": {
+ "value": 15.0
+ },
+ "machine_extruder_count": {
+ "default_value": 1
+ },
+ "machine_start_gcode": {
+ "default_value": "; Mcreate Start Gcode \nG28 ; Home all axes \nG92 E0 ; Reset Extruder\nG1 X0 Y0 Z15 F3000.0 ; Move to start position \nG1 E10 F400 ;load filament \nG1 E2 F400 ;retarct filament \nG92 E0 ; Reset Extruder \nG1 X0 Y130 Z15 F3000.0 \nG12 ; clean nozzle \nG1 X0 Y0 Z0.3 F3000.0 ; Move to start position \nG1 E9.0 F400 ;loadsome filament \nG92 E0 ; Reset Extruder \n; End of start GCode"
+ },
+ "machine_end_gcode": {
+ "default_value": "; Mcreate end Gcode \nG4 ; Wait command in buffer have finished \nG92 E0 \nG1 E-2 F300; retract filament \nG28 X Z; home x z axis \nG1 F3000 Y220;Move Heat Bed to the front for easy print removal \nM104 S0; Turn off the nozzle heat \nM140 S0; Turn off the bed heat \nM107 ; Turn off the Fan \nM84 ; Disable stepper motors \n; End of GCode"
+ }
+ }
+}
diff --git a/resources/definitions/makeit_pro_l.def.json b/resources/definitions/makeit_pro_l.def.json
index 5d09189de8..d601a5c309 100644
--- a/resources/definitions/makeit_pro_l.def.json
+++ b/resources/definitions/makeit_pro_l.def.json
@@ -77,27 +77,12 @@
"retraction_amount": {
"default_value": 6
},
- "retraction_min_travel": {
- "default_value": 1.5
- },
- "speed_travel": {
- "default_value": 150
- },
"speed_print": {
"default_value": 60
},
"wall_thickness": {
"default_value": 1.2
},
- "bottom_thickness": {
- "default_value": 0.2
- },
- "speed_layer_0": {
- "default_value": 20
- },
- "speed_print_layer_0": {
- "default_value": 20
- },
"cool_min_layer_time_fan_speed_max": {
"default_value": 5
},
diff --git a/resources/definitions/makeit_pro_m.def.json b/resources/definitions/makeit_pro_m.def.json
index 57e2a7dbd4..267646b647 100644
--- a/resources/definitions/makeit_pro_m.def.json
+++ b/resources/definitions/makeit_pro_m.def.json
@@ -77,27 +77,12 @@
"retraction_amount": {
"default_value": 6
},
- "retraction_min_travel": {
- "default_value": 1.5
- },
- "speed_travel": {
- "default_value": 150
- },
"speed_print": {
"default_value": 60
},
"wall_thickness": {
"default_value": 1.2
},
- "bottom_thickness": {
- "default_value": 0.2
- },
- "speed_layer_0": {
- "default_value": 20
- },
- "speed_print_layer_0": {
- "default_value": 20
- },
"cool_min_layer_time_fan_speed_max": {
"default_value": 5
},
diff --git a/resources/definitions/maker_starter.def.json b/resources/definitions/maker_starter.def.json
index 560e53ccb9..96dca118af 100644
--- a/resources/definitions/maker_starter.def.json
+++ b/resources/definitions/maker_starter.def.json
@@ -53,57 +53,15 @@
"layer_height_0": {
"default_value": 0.2
},
- "wall_line_count": {
- "default_value": 2
- },
- "top_layers": {
- "default_value": 4
- },
- "bottom_layers": {
- "default_value": 4
- },
"speed_print": {
"default_value": 50
},
- "speed_wall": {
- "default_value": 30
- },
- "speed_wall_0": {
- "default_value": 30
- },
- "speed_wall_x": {
- "default_value": 30
- },
- "speed_topbottom": {
- "default_value": 50
- },
- "speed_support": {
- "default_value": 50
- },
- "speed_travel": {
- "default_value": 120
- },
- "speed_layer_0": {
- "default_value": 20
- },
- "skirt_brim_speed": {
- "default_value": 15
- },
"speed_slowdown_layers": {
"default_value": 4
},
"infill_sparse_density": {
"default_value": 20
},
- "cool_fan_speed_min": {
- "default_value": 50
- },
- "cool_fan_speed_max": {
- "default_value": 100
- },
- "cool_fan_full_layer": {
- "default_value": 4
- },
"cool_min_layer_time": {
"default_value": 5
},
@@ -122,12 +80,6 @@
"support_z_distance": {
"default_value": 0.2
},
- "support_top_distance": {
- "default_value": 0.2
- },
- "support_bottom_distance": {
- "default_value": 0.24
- },
"support_pattern": {
"default_value": "ZigZag"
},
@@ -140,24 +92,6 @@
"skirt_brim_minimal_length": {
"default_value": 100
},
- "raft_base_line_spacing": {
- "default_value": 2
- },
- "raft_base_thickness": {
- "default_value": 0.3
- },
- "raft_base_line_width": {
- "default_value": 2
- },
- "raft_base_speed": {
- "default_value": 15
- },
- "raft_interface_thickness": {
- "default_value": 0.24
- },
- "raft_interface_line_width": {
- "default_value": 0.6
- },
"raft_airgap": {
"default_value": 0.2
},
diff --git a/resources/definitions/makerbotreplicator.def.json b/resources/definitions/makerbotreplicator.def.json
index 3b02215e74..24b556e1ee 100644
--- a/resources/definitions/makerbotreplicator.def.json
+++ b/resources/definitions/makerbotreplicator.def.json
@@ -18,9 +18,7 @@
"overrides": {
"prime_tower_size": { "default_value": 10.0 },
"infill_sparse_density": { "default_value": 10 },
- "speed_travel": { "default_value": 150 },
"layer_height": { "default_value": 0.15 },
- "material_print_temperature": { "default_value": 220 },
"machine_extruder_count": { "default_value": 1 },
"machine_heated_bed": { "default_value": true },
"machine_center_is_zero": { "default_value": false },
diff --git a/resources/definitions/malyan_m180.def.json b/resources/definitions/malyan_m180.def.json
index cd3a068134..bb812b6dd6 100644
--- a/resources/definitions/malyan_m180.def.json
+++ b/resources/definitions/malyan_m180.def.json
@@ -1,5 +1,4 @@
{
- "id": "malyan_m180",
"version": 2,
"name": "Malyan M180",
"inherits": "fdmprinter",
diff --git a/resources/definitions/malyan_m200.def.json b/resources/definitions/malyan_m200.def.json
index 71c94184b2..fc8756ff6a 100644
--- a/resources/definitions/malyan_m200.def.json
+++ b/resources/definitions/malyan_m200.def.json
@@ -1,5 +1,4 @@
{
- "id": "malyan_m200",
"version": 2,
"name": "Malyan M200",
"inherits": "fdmprinter",
@@ -30,8 +29,6 @@
"speed_wall_x": { "value": "speed_print" },
"speed_support": { "value": "speed_wall_0" },
"speed_layer_0": { "value": "round(speed_print / 2.0, 2)" },
- "speed_travel": { "default_value": 50 },
- "speed_travel_layer_0": { "default_value": 40 },
"speed_infill": { "value": "speed_print" },
"speed_topbottom": {"value": "speed_print / 2"},
diff --git a/resources/definitions/mankati_fullscale_xt_plus.def.json b/resources/definitions/mankati_fullscale_xt_plus.def.json
index 104be7091b..b6fa040750 100644
--- a/resources/definitions/mankati_fullscale_xt_plus.def.json
+++ b/resources/definitions/mankati_fullscale_xt_plus.def.json
@@ -41,23 +41,15 @@
"layer_height": { "default_value": 0.2 },
"wall_thickness": { "default_value": 0.8 },
"top_bottom_thickness": { "default_value": 0.3 },
- "material_print_temperature": { "default_value": 195 },
- "material_bed_temperature": { "default_value": 60 },
"retraction_enable": { "default_value": true },
"retraction_speed": { "default_value": 50 },
"retraction_amount": { "default_value": 0.8 },
"retraction_hop": { "default_value": 0.075 },
"speed_print": { "default_value": 60 },
- "speed_infill": { "default_value": 100 },
- "speed_topbottom": { "default_value": 15 },
- "speed_travel": { "default_value": 150 },
"speed_layer_0": {
- "minimum_value": "0.1",
- "default_value": 15.0
+ "minimum_value": "0.1"
},
- "infill_overlap": { "default_value": 10 },
"cool_fan_enabled": { "default_value": false },
- "cool_fan_speed": { "default_value": 0 },
"skirt_line_count": { "default_value": 3 },
"skirt_gap": { "default_value": 4 },
"skirt_brim_minimal_length": { "default_value": 200 }
diff --git a/resources/definitions/monoprice_select_mini_v1.def.json b/resources/definitions/monoprice_select_mini_v1.def.json
index a516d54b18..4fe67fc92e 100644
--- a/resources/definitions/monoprice_select_mini_v1.def.json
+++ b/resources/definitions/monoprice_select_mini_v1.def.json
@@ -1,5 +1,4 @@
{
- "id": "monoprice_select_mini_v1",
"version": 2,
"name": "Monoprice Select Mini V1",
"inherits": "malyan_m200",
diff --git a/resources/definitions/monoprice_select_mini_v2.def.json b/resources/definitions/monoprice_select_mini_v2.def.json
index bed4fb1adb..2364e49383 100644
--- a/resources/definitions/monoprice_select_mini_v2.def.json
+++ b/resources/definitions/monoprice_select_mini_v2.def.json
@@ -1,5 +1,4 @@
{
- "id": "monoprice_select_mini_v2",
"version": 2,
"name": "Monoprice Select Mini V2 (E3D)",
"inherits": "malyan_m200",
diff --git a/resources/definitions/nwa3d_a31.def.json b/resources/definitions/nwa3d_a31.def.json
index 6463ac2ca4..1cfd02fe7f 100644
--- a/resources/definitions/nwa3d_a31.def.json
+++ b/resources/definitions/nwa3d_a31.def.json
@@ -34,7 +34,7 @@
"machine_depth": {
"default_value": 300
},
- "machine_head_polygon": {
+ "machine_head_with_fans_polygon": {
"default_value": [
[-30, 34],
[-30, -32],
diff --git a/resources/definitions/nwa3d_a5.def.json b/resources/definitions/nwa3d_a5.def.json
index 4309e07184..1631860d47 100644
--- a/resources/definitions/nwa3d_a5.def.json
+++ b/resources/definitions/nwa3d_a5.def.json
@@ -32,7 +32,7 @@
"machine_depth": {
"default_value": 150
},
- "machine_head_polygon": {
+ "machine_head_with_fans_polygon": {
"default_value": [
[-30, 34],
[-30, -32],
diff --git a/resources/definitions/ord.def.json b/resources/definitions/ord.def.json
index de410b0d58..4a550602f2 100644
--- a/resources/definitions/ord.def.json
+++ b/resources/definitions/ord.def.json
@@ -19,12 +19,9 @@
},
"overrides": {
- "material_bed_temperature": { "default_value": 60 },
"prime_tower_size": { "default_value": 7.0710678118654755 },
"infill_sparse_density": { "default_value": 15 },
- "speed_travel": { "default_value": 150 },
"layer_height": { "default_value": 0.3 },
- "material_print_temperature": { "default_value": 240 },
"machine_extruder_count": { "default_value": 5 },
"machine_heated_bed": { "default_value": true },
"machine_center_is_zero": { "default_value": false },
diff --git a/resources/definitions/printrbot_play.def.json b/resources/definitions/printrbot_play.def.json
index b8879e825c..bf52363800 100644
--- a/resources/definitions/printrbot_play.def.json
+++ b/resources/definitions/printrbot_play.def.json
@@ -29,7 +29,6 @@
"machine_head_with_fans_polygon": { "default_value": [[-32,999],[37,999],[37,-32],[-32,-32]] },
"gantry_height": { "value": "55" },
"speed_print": { "default_value": 50 },
- "speed_travel": { "default_value": 55 },
"machine_max_feedrate_x": {"default_value": 125},
"machine_max_feedrate_y": {"default_value": 125},
"machine_max_feedrate_z": { "default_value": 5 },
diff --git a/resources/definitions/prusa_i3.def.json b/resources/definitions/prusa_i3.def.json
index 581de6fd98..267a7ba4e6 100644
--- a/resources/definitions/prusa_i3.def.json
+++ b/resources/definitions/prusa_i3.def.json
@@ -31,14 +31,6 @@
"machine_center_is_zero": {
"default_value": false
},
- "machine_head_polygon": {
- "default_value": [
- [-75, -18],
- [-75, 35],
- [18, 35],
- [18, -18]
- ]
- },
"machine_head_with_fans_polygon": {
"default_value": [
[-75, -18],
diff --git a/resources/definitions/prusa_i3_mk2.def.json b/resources/definitions/prusa_i3_mk2.def.json
index ff6f4469e7..5ae541049d 100644
--- a/resources/definitions/prusa_i3_mk2.def.json
+++ b/resources/definitions/prusa_i3_mk2.def.json
@@ -22,13 +22,10 @@
"machine_height": { "default_value": 200 },
"machine_depth": { "default_value": 210 },
"machine_center_is_zero": { "default_value": false },
- "material_bed_temperature": { "default_value": 55 },
"layer_height": { "default_value": 0.1 },
"layer_height_0": { "default_value": 0.15 },
"retraction_amount": { "default_value": 0.8 },
"retraction_speed": { "default_value": 35 },
- "retraction_retract_speed": { "default_value": 35 },
- "retraction_prime_speed": { "default_value": 35 },
"adhesion_type": { "default_value": "skirt" },
"machine_head_with_fans_polygon": { "default_value": [[-31,31],[34,31],[34,-40],[-31,-40]] },
"gantry_height": { "value": "28" },
diff --git a/resources/definitions/prusa_i3_mk3.def.json b/resources/definitions/prusa_i3_mk3.def.json
new file mode 100644
index 0000000000..eddc1d88df
--- /dev/null
+++ b/resources/definitions/prusa_i3_mk3.def.json
@@ -0,0 +1,50 @@
+{
+ "version": 2,
+ "name": "Prusa i3 Mk3/Mk3s",
+ "inherits": "fdmprinter",
+ "metadata": {
+ "visible": true,
+ "author": "Prusa Research",
+ "manufacturer": "Prusa3D",
+ "file_formats": "text/x-gcode",
+ "icon": "icon_ultimaker2",
+ "platform": "Original_Prusa_i3_MK3S_MK3_platform.stl",
+ "has_materials": true,
+ "machine_extruder_trains":
+ {
+ "0": "prusa_i3_mk3_extruder_0"
+ }
+ },
+
+ "overrides": {
+ "machine_name": { "default_value": "Prusa i3 Mk3/Mk3s" },
+ "machine_heated_bed": { "default_value": true },
+ "machine_width": { "default_value": 250 },
+ "machine_height": { "default_value": 210 },
+ "machine_depth": { "default_value": 210 },
+ "machine_center_is_zero": { "default_value": false },
+ "material_diameter": { "default_value": 1.75 },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "layer_height": { "default_value": 0.15 },
+ "layer_height_0": { "default_value": 0.2 },
+ "retraction_amount": { "default_value": 0.8 },
+ "retraction_speed": { "default_value": 35 },
+ "adhesion_type": { "default_value": "skirt" },
+ "machine_head_with_fans_polygon": { "default_value": [[-31,31],[34,31],[34,-40],[-31,-40]] },
+ "gantry_height": { "value": 28 },
+ "machine_max_feedrate_z": { "default_value": 12 },
+ "machine_max_feedrate_e": { "default_value": 120 },
+ "machine_max_acceleration_z": { "default_value": 500 },
+ "machine_acceleration": { "default_value": 1000 },
+ "machine_max_jerk_xy": { "default_value": 10 },
+ "machine_max_jerk_z": { "default_value": 0.2 },
+ "machine_max_jerk_e": { "default_value": 2.5 },
+ "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
+ "machine_start_gcode": {
+ "default_value": "G21 ; set units to millimeters\nG90 ; use absolute positioning\nM82 ; absolute extrusion mode\nM104 S{material_print_temperature_layer_0} ; set extruder temp\nM140 S{material_bed_temperature_layer_0} ; set bed temp\nM190 S{material_bed_temperature_layer_0} ; wait for bed temp\nM109 S{material_print_temperature_layer_0} ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG92 E0.0 ; reset extruder distance position\nG1 Y-3.0 F1000.0 ; go outside print area\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E21.5 F1000.0 ; intro line\nG92 E0.0 ; reset extruder distance position"
+ },
+ "machine_end_gcode": {
+ "default_value": "M104 S0 ; turn off extruder\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y210; home X axis and push Y forward\nM84 ; disable motors"
+ }
+ }
+}
diff --git a/resources/definitions/prusa_i3_xl.def.json b/resources/definitions/prusa_i3_xl.def.json
index b9628b9430..dae1bdce4f 100644
--- a/resources/definitions/prusa_i3_xl.def.json
+++ b/resources/definitions/prusa_i3_xl.def.json
@@ -31,7 +31,7 @@
"machine_center_is_zero": {
"default_value": false
},
- "machine_head_polygon": {
+ "machine_head_with_fans_polygon": {
"default_value": [
[-75, -18],
[-75, 35],
diff --git a/resources/definitions/punchtec_connect_xl.def.json b/resources/definitions/punchtec_connect_xl.def.json
index 1efdd226fd..9bae80b0ac 100644
--- a/resources/definitions/punchtec_connect_xl.def.json
+++ b/resources/definitions/punchtec_connect_xl.def.json
@@ -16,16 +16,10 @@
},
"overrides": {
- "machine_head_polygon": { "default_value": [[ 0, 0], [ 0, 0], [ 0, 0], [ 0, 0]] },
- "speed_travel": { "default_value": 150 },
+ "machine_head_with_fans_polygon": { "default_value": [[ 0, 0], [ 0, 0], [ 0, 0], [ 0, 0]] },
"prime_tower_size": { "default_value": 8.660254037844387 },
- "speed_wall_x": { "default_value": 40 },
- "speed_wall_0": { "default_value": 40 },
- "speed_topbottom": { "default_value": 40 },
"layer_height": { "default_value": 0.2 },
- "material_print_temperature": { "default_value": 195 },
"speed_print": { "default_value": 40 },
- "speed_infill": { "default_value": 40 },
"machine_extruder_count": { "default_value": 2 },
"machine_heated_bed": { "default_value": true },
"machine_center_is_zero": { "default_value": false },
diff --git a/resources/definitions/raise3D_N2_dual.def.json b/resources/definitions/raise3D_N2_dual.def.json
index 1994cc2bcb..530ad79d19 100644
--- a/resources/definitions/raise3D_N2_dual.def.json
+++ b/resources/definitions/raise3D_N2_dual.def.json
@@ -76,10 +76,10 @@
"default_value": 2
},
"prime_tower_position_x": {
- "default_value": 195
+ "value": "195"
},
"prime_tower_position_y": {
- "default_value": 149
+ "value": "149"
}
}
}
diff --git a/resources/definitions/raise3D_N2_plus_dual.def.json b/resources/definitions/raise3D_N2_plus_dual.def.json
index 23ad1fbd09..ffc4afec16 100644
--- a/resources/definitions/raise3D_N2_plus_dual.def.json
+++ b/resources/definitions/raise3D_N2_plus_dual.def.json
@@ -76,10 +76,10 @@
"default_value": 2
},
"prime_tower_position_x": {
- "default_value": 195
+ "value": "195"
},
"prime_tower_position_y": {
- "default_value": 149
+ "value": "149"
}
}
}
diff --git a/resources/definitions/raise3D_N2_plus_single.def.json b/resources/definitions/raise3D_N2_plus_single.def.json
index f8a1a7e0fb..ccb169efb1 100644
--- a/resources/definitions/raise3D_N2_plus_single.def.json
+++ b/resources/definitions/raise3D_N2_plus_single.def.json
@@ -72,10 +72,10 @@
"default_value": "M107\nM1002\nM104 S0 T1\nM104 S0 T0\nM140 S0\nM117 Print Complete.\nG28 X0 Y0\nG91\nG1 Z10\nG90\nM84"
},
"prime_tower_position_x": {
- "default_value": 195
+ "value": "195"
},
"prime_tower_position_y": {
- "default_value": 149
+ "value": "149"
}
}
}
diff --git a/resources/definitions/raise3D_N2_single.def.json b/resources/definitions/raise3D_N2_single.def.json
index c69823466b..f0915d1a31 100644
--- a/resources/definitions/raise3D_N2_single.def.json
+++ b/resources/definitions/raise3D_N2_single.def.json
@@ -72,10 +72,10 @@
"default_value": "M107\nM1002\nM104 S0 T1\nM104 S0 T0\nM140 S0\nM117 Print Complete.\nG28 X0 Y0\nG91\nG1 Z10\nG90\nM84"
},
"prime_tower_position_x": {
- "default_value": 195
+ "value": "195"
},
"prime_tower_position_y": {
- "default_value": 149
+ "value": "149"
}
}
}
diff --git a/resources/definitions/rigid3d.def.json b/resources/definitions/rigid3d.def.json
index 43ffd6924a..ba90894f7d 100644
--- a/resources/definitions/rigid3d.def.json
+++ b/resources/definitions/rigid3d.def.json
@@ -21,27 +21,17 @@
"machine_end_gcode": {
"default_value": " ; -- END GCODE --\n G1 X0 Y230 ; Get extruder out of way.\n M107 ; Turn off fan\n G91 ; Relative positioning\n G0 Z20 ; Lift extruder up\n T0\n G1 E-1 ; Reduce filament pressure\n M104 T0 S0 ; Turn ectruder heater off\n G90 ; Absolute positioning\n G92 E0 ; Reset extruder position\n M140 S0 ; Disable heated bed\n M84 ; Turn steppers off\n ; -- end of END GCODE --\n"
},
- "machine_head_polygon": { "default_value": [[ 22, 67], [ 22, 51], [ 36, 51], [ 36, 67]] },
+ "machine_head_with_fans_polygon": { "default_value": [[ 22, 67], [ 22, 51], [ 36, 51], [ 36, 67]] },
"skirt_gap": { "default_value": 5.0 },
"cool_min_layer_time": { "default_value": 10 },
"prime_tower_size": { "default_value": 7.745966692414834 },
- "speed_wall_x": { "default_value": 40 },
- "speed_travel": { "default_value": 100 },
- "bottom_thickness": { "default_value": 0.75 },
"layer_height_0": { "default_value": 0.25 },
"support_angle": { "default_value": 45 },
- "material_bed_temperature": { "default_value": 100 },
- "top_thickness": { "default_value": 0.75 },
- "material_print_temperature": { "default_value": 235 },
"retraction_speed": { "default_value": 60.0 },
"wall_thickness": { "default_value": 0.8 },
- "retraction_min_travel": { "default_value": 2 },
- "speed_wall_0": { "default_value": 30 },
"retraction_amount": { "default_value": 1 },
- "speed_topbottom": { "default_value": 30 },
"layer_height": { "default_value": 0.25 },
"speed_print": { "default_value": 40 },
- "speed_infill": { "default_value": 40 },
"machine_extruder_count": { "default_value": 1 },
"machine_heated_bed": { "default_value": true },
"machine_center_is_zero": { "default_value": false },
diff --git a/resources/definitions/rigid3d_3rdgen.def.json b/resources/definitions/rigid3d_3rdgen.def.json
index bb3414b75d..6e1a93fb40 100644
--- a/resources/definitions/rigid3d_3rdgen.def.json
+++ b/resources/definitions/rigid3d_3rdgen.def.json
@@ -21,24 +21,16 @@
"machine_end_gcode": {
"default_value": " ; -- END GCODE --\n G1 X0 Y230 ; Get extruder out of way.\n M107 ; Turn off fan\n G91 ; Relative positioning\n G0 Z20 ; Lift extruder up\n T0\n G1 E-1 ; Reduce filament pressure\n M104 T0 S0 ; Turn extruder heater off\n G90 ; Absolute positioning\n G92 E0 ; Reset extruder position\n M140 S0 ; Disable heated bed\n M84 ; Turn steppers off\n ; -- end of END GCODE --\n"
},
- "machine_head_polygon": { "default_value": [[ 18, 0], [ 18, 65], [ 32, 65], [ 32, 0]] },
+ "machine_head_with_fans_polygon": { "default_value": [[ 18, 0], [ 18, 65], [ 32, 65], [ 32, 0]] },
"cool_min_layer_time": { "default_value": 10 },
"prime_tower_size": { "default_value": 7.745966692414834 },
"skirt_gap": { "default_value": 5.0 },
- "speed_travel": { "default_value": 120 },
- "bottom_thickness": { "default_value": 0.75 },
"layer_height_0": { "default_value": 0.25 },
"support_angle": { "default_value": 45 },
- "material_bed_temperature": { "default_value": 100 },
- "retraction_min_travel": { "default_value": 2 },
- "speed_wall_0": { "default_value": 30 },
"retraction_speed": { "default_value": 60.0 },
"wall_thickness": { "default_value": 0.8 },
- "material_print_temperature": { "default_value": 235 },
"retraction_amount": { "default_value": 1 },
- "speed_topbottom": { "default_value": 25 },
"layer_height": { "default_value": 0.25 },
- "top_thickness": { "default_value": 0.75 },
"machine_extruder_count": { "default_value": 1 },
"machine_heated_bed": { "default_value": true },
"machine_center_is_zero": { "default_value": false },
diff --git a/resources/definitions/rigid3d_hobby.def.json b/resources/definitions/rigid3d_hobby.def.json
index db48195fe0..d89c1aeaff 100644
--- a/resources/definitions/rigid3d_hobby.def.json
+++ b/resources/definitions/rigid3d_hobby.def.json
@@ -15,27 +15,19 @@
},
"overrides": {
- "machine_head_polygon": { "default_value": [[ 16, 30], [ 16, 45], [ 16, 45], [ 16, 30]] },
+ "machine_head_with_fans_polygon": { "default_value": [[ 16, 30], [ 16, 45], [ 16, 45], [ 16, 30]] },
"prime_tower_size": { "default_value": 8.660254037844387 },
- "speed_travel": { "default_value": 40 },
"skirt_gap": { "default_value": 5.0 },
"cool_min_layer_time": { "default_value": 15 },
"support_pattern": { "default_value": "grid" },
"layer_height_0": { "default_value": 0.25 },
- "speed_wall_x": { "default_value": 30 },
"skirt_line_count": { "default_value": 2 },
"support_angle": { "default_value": 45 },
- "speed_topbottom": { "default_value": 20 },
- "material_print_temperature": { "default_value": 205 },
"retraction_speed": { "default_value": 80 },
"wall_thickness": { "default_value": 0.8 },
- "retraction_min_travel": { "default_value": 2 },
- "speed_wall_0": { "default_value": 20 },
"retraction_amount": { "default_value": 2 },
- "speed_layer_0": { "default_value": 15 },
"layer_height": { "default_value": 0.2 },
"speed_print": { "default_value": 30 },
- "speed_infill": { "default_value": 30 },
"machine_extruder_count": { "default_value": 1 },
"machine_heated_bed": { "default_value": false },
"machine_center_is_zero": { "default_value": false },
diff --git a/resources/definitions/rigid3d_mucit.def.json b/resources/definitions/rigid3d_mucit.def.json
index 42cd99a3bd..75853fab8b 100644
--- a/resources/definitions/rigid3d_mucit.def.json
+++ b/resources/definitions/rigid3d_mucit.def.json
@@ -76,14 +76,9 @@
"default_value": true
},
"cool_fan_speed": {
- "default_value": 100,
"value": "100"
},
- "cool_fan_speed_min": {
- "default_value": 0
- },
"cool_fan_full_at_height": {
- "default_value": 0.5,
"value": "0.5"
},
"support_z_distance": {
diff --git a/resources/definitions/rigid3d_zero.def.json b/resources/definitions/rigid3d_zero.def.json
index f55f913a56..54bd2c3dca 100644
--- a/resources/definitions/rigid3d_zero.def.json
+++ b/resources/definitions/rigid3d_zero.def.json
@@ -21,24 +21,14 @@
"machine_end_gcode": {
"default_value": " ; -- END GCODE --\n G1 X0 Y230 ; Get extruder out of way.\n M107 ; Turn off fan\n G91 ; Relative positioning\n G0 Z20 ; Lift extruder up\n T0\n G1 E-1 ; Reduce filament pressure\n M104 T0 S0 ; Turn ectruder heater off\n G90 ; Absolute positioning\n G92 E0 ; Reset extruder position\n M140 S0 ; Disable heated bed\n M84 ; Turn steppers off\n ; -- end of END GCODE --\n"
},
- "machine_head_polygon": { "default_value": [[ 40, 15], [ 40, 60], [ 30, 60], [ 30, 15]] },
+ "machine_head_with_fans_polygon": { "default_value": [[ 40, 15], [ 40, 60], [ 30, 60], [ 30, 15]] },
"support_pattern": { "default_value": "grid" },
"cool_min_layer_time": { "default_value": 10 },
- "speed_travel": { "default_value": 80 },
"support_angle": { "default_value": 45 },
- "retraction_min_travel": { "default_value": 2 },
- "speed_wall_0": { "default_value": 20 },
- "speed_layer_0": { "default_value": 15 },
- "speed_infill": { "default_value": 30 },
- "speed_topbottom": { "default_value": 30 },
"prime_tower_size": { "default_value": 7.745966692414834 },
"skirt_line_count": { "default_value": 2 },
- "speed_wall_x": { "default_value": 30 },
- "bottom_thickness": { "default_value": 0.75 },
"layer_height_0": { "default_value": 0.25 },
- "top_thickness": { "default_value": 0.75 },
"wall_thickness": { "default_value": 0.8 },
- "material_print_temperature": { "default_value": 195 },
"retraction_amount": { "default_value": 1.5 },
"skirt_gap": { "default_value": 5.0 },
"layer_height": { "default_value": 0.25 },
diff --git a/resources/definitions/rigid3d_zero2.def.json b/resources/definitions/rigid3d_zero2.def.json
index f24c869636..cc922769f7 100644
--- a/resources/definitions/rigid3d_zero2.def.json
+++ b/resources/definitions/rigid3d_zero2.def.json
@@ -44,9 +44,6 @@
"material_print_temperature": {
"value": 235
},
- "material_bed_temperature": {
- "default_value": 100
- },
"speed_print": {
"default_value": 40
},
@@ -55,7 +52,7 @@
},
"speed_travel": {
"value": 100
- },
+ },
"support_enable": {
"default_value": false
},
@@ -90,14 +87,9 @@
"default_value": false
},
"cool_fan_speed": {
- "default_value": 50,
"value": 50
},
- "cool_fan_speed_min": {
- "default_value": 0
- },
"cool_fan_full_at_height": {
- "default_value": 1.0,
"value": 1.0
},
"support_z_distance": {
diff --git a/resources/definitions/rigidbot.def.json b/resources/definitions/rigidbot.def.json
index c04cd7c5e6..d6fb4f1651 100644
--- a/resources/definitions/rigidbot.def.json
+++ b/resources/definitions/rigidbot.def.json
@@ -49,37 +49,15 @@
"top_bottom_thickness": {
"default_value": 0.3
},
- "material_print_temperature": {
- "default_value": 195
- },
- "material_bed_temperature": {
- "default_value": 60
- },
"speed_print": {
"default_value": 60
},
- "speed_infill": {
- "default_value": 100
- },
- "speed_topbottom": {
- "default_value": 15
- },
- "speed_travel": {
- "default_value": 150
- },
"speed_layer_0": {
- "default_value": 15,
"minimum_value": "0.1"
},
- "infill_overlap": {
- "default_value": 10
- },
"cool_fan_enabled": {
"default_value": false
},
- "cool_fan_speed": {
- "default_value": 0
- },
"skirt_line_count": {
"default_value": 3
},
diff --git a/resources/definitions/rigidbot_big.def.json b/resources/definitions/rigidbot_big.def.json
index c97c6df9f3..9568417acc 100644
--- a/resources/definitions/rigidbot_big.def.json
+++ b/resources/definitions/rigidbot_big.def.json
@@ -49,37 +49,15 @@
"top_bottom_thickness": {
"default_value": 0.3
},
- "material_print_temperature": {
- "default_value": 195
- },
- "material_bed_temperature": {
- "default_value": 60
- },
"speed_print": {
"default_value": 60
},
- "speed_infill": {
- "default_value": 100
- },
- "speed_topbottom": {
- "default_value": 15
- },
- "speed_travel": {
- "default_value": 150
- },
"speed_layer_0": {
- "default_value": 15,
"minimum_value": "0.1"
},
- "infill_overlap": {
- "default_value": 10
- },
"cool_fan_enabled": {
"default_value": false
},
- "cool_fan_speed": {
- "default_value": 0
- },
"skirt_line_count": {
"default_value": 3
},
diff --git a/resources/definitions/robo_3d_r1.def.json b/resources/definitions/robo_3d_r1.def.json
index 8d7698e198..36b8addd27 100644
--- a/resources/definitions/robo_3d_r1.def.json
+++ b/resources/definitions/robo_3d_r1.def.json
@@ -22,28 +22,16 @@
"default_value": " M104 S0 ;extruder heater off\n M140 S0 ;heated bed heater off (if you have it)\n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning\n"
},
"cool_min_layer_time": { "default_value": 7 },
- "speed_topbottom": { "default_value": 40 },
"retraction_speed": { "default_value": 50 },
- "layer_0_z_overlap": { "default_value": 0.2 },
"cool_min_speed": { "default_value": 19 },
- "material_bed_temperature": { "default_value": 60 },
"support_angle": { "default_value": 50 },
- "speed_layer_0": { "default_value": 30 },
- "line_width": { "default_value": 0.4 },
- "speed_infill": { "default_value": 60 },
"prime_tower_size": { "default_value": 8.660254037844387 },
"support_enable": { "default_value": true },
- "cool_fan_full_at_height": { "default_value": 0.1 },
- "bottom_thickness": { "default_value": 1.2 },
"raft_airgap": { "default_value": 0.2 },
"layer_height_0": { "default_value": 0.15 },
- "top_thickness": { "default_value": 1.2 },
- "speed_wall_0": { "default_value": 40 },
- "retraction_min_travel": { "default_value": 5 },
"material_flow": { "default_value": 100 },
"infill_sparse_density": { "default_value": 10 },
"wall_thickness": { "default_value": 1.2 },
- "material_print_temperature": { "default_value": 190 },
"retraction_amount": { "default_value": 3 },
"layer_height": { "default_value": 0.2 },
"speed_print": { "default_value": 40 },
diff --git a/resources/definitions/seemecnc_artemis.def.json b/resources/definitions/seemecnc_artemis.def.json
index ec92f528d7..88c1d84b3d 100644
--- a/resources/definitions/seemecnc_artemis.def.json
+++ b/resources/definitions/seemecnc_artemis.def.json
@@ -27,13 +27,11 @@
"machine_name": { "default_value": "Artemis" },
"machine_shape": { "default_value": "elliptic" },
"machine_width": { "default_value": 290 },
- "relative_extrusion": { "default_value": false },
+ "relative_extrusion": { "value": "False" },
"retraction_amount": { "default_value": 3.2 },
"retraction_combing": { "default_value": "off" },
"retraction_hop_enabled": { "default_value": true },
"retraction_hop_only_when_collides": { "default_value": false },
- "retraction_prime_speed": { "default_value": 45 },
- "retraction_retract_speed": { "default_value": 45 },
"retraction_speed": { "default_value": 45 },
"machine_start_gcode": {
"default_value": "G28\nG1 Z15.0 F10000\nG92 E0"
diff --git a/resources/definitions/seemecnc_v32.def.json b/resources/definitions/seemecnc_v32.def.json
index d4316c25d9..0f49410116 100644
--- a/resources/definitions/seemecnc_v32.def.json
+++ b/resources/definitions/seemecnc_v32.def.json
@@ -27,13 +27,11 @@
"machine_name": { "default_value": "Rostock Max V3.2" },
"machine_shape": { "default_value": "elliptic" },
"machine_width": { "default_value": 265 },
- "relative_extrusion": { "default_value": false },
+ "relative_extrusion": { "value": "False" },
"retraction_amount": { "default_value": 3.2 },
"retraction_combing": { "default_value": "off" },
"retraction_hop_enabled": { "default_value": true },
"retraction_hop_only_when_collides": { "default_value": false },
- "retraction_prime_speed": { "default_value": 45 },
- "retraction_retract_speed": { "default_value": 45 },
"retraction_speed": { "default_value": 45 },
"machine_start_gcode": {
"default_value": "G28\nG1 Z15.0 F10000\nG92 E0"
diff --git a/resources/definitions/skriware_2.def.json b/resources/definitions/skriware_2.def.json
new file mode 100644
index 0000000000..584cdd1708
--- /dev/null
+++ b/resources/definitions/skriware_2.def.json
@@ -0,0 +1,598 @@
+{
+ "name": "Skriware 2",
+ "version": 2,
+ "inherits": "fdmprinter",
+ "metadata": {
+ "visible": true,
+ "author": "Skriware",
+ "manufacturer": "Skriware",
+ "category": "Other",
+ "file_formats": "text/x-gcode",
+ "platform_offset": [
+ 0,
+ 0,
+ 0
+ ],
+ "supports_usb_connection": false,
+ "platform": "skriware_2_platform.stl",
+ "machine_extruder_trains": {
+ "0": "skriware_2_extruder_0",
+ "1": "skriware_2_extruder_1"
+ }
+ },
+ "overrides": {
+ "jerk_print_layer_0": {
+ "value": "5"
+ },
+ "jerk_prime_tower": {
+ "value": "5"
+ },
+ "expand_skins_expand_distance": {
+ "value": "1.2"
+ },
+ "jerk_support_interface": {
+ "value": "5"
+ },
+ "jerk_travel_layer_0": {
+ "value": "5.0"
+ },
+ "wipe_retraction_prime_speed": {
+ "value": "30"
+ },
+ "material_standby_temperature": {
+ "default_value": 195
+ },
+ "acceleration_support_bottom": {
+ "value": "250"
+ },
+ "raft_base_line_width": {
+ "value": "0.5"
+ },
+ "raft_speed": {
+ "value": "30.0"
+ },
+ "jerk_topbottom": {
+ "value": "5"
+ },
+ "ironing_inset": {
+ "value": "0.2"
+ },
+ "acceleration_wall": {
+ "value": "250"
+ },
+ "cross_infill_pocket_size": {
+ "value": "5.333333333333333"
+ },
+ "jerk_support_roof": {
+ "value": "5"
+ },
+ "acceleration_print": {
+ "default_value": 250
+ },
+ "meshfix_maximum_travel_resolution": {
+ "value": "0.8"
+ },
+ "support_top_distance": {
+ "value": "0.22"
+ },
+ "acceleration_enabled": {
+ "default_value": true
+ },
+ "optimize_wall_printing_order": {
+ "default_value": true
+ },
+ "jerk_layer_0": {
+ "value": "5"
+ },
+ "infill_line_distance": {
+ "value": "5.333333333333333"
+ },
+ "acceleration_ironing": {
+ "value": "250"
+ },
+ "material_print_temperature_layer_0": {
+ "value": "195"
+ },
+ "bridge_skin_speed_2": {
+ "value": "15"
+ },
+ "acceleration_travel": {
+ "value": "250"
+ },
+ "switch_extruder_retraction_speed": {
+ "value": "30"
+ },
+ "jerk_print": {
+ "default_value": 5
+ },
+ "material_guid": {
+ "default_value": "0ff92885-617b-4144-a03c-9989872454bc"
+ },
+ "raft_interface_acceleration": {
+ "value": "250"
+ },
+ "acceleration_support_interface": {
+ "value": "250"
+ },
+ "cool_fan_full_layer": {
+ "value": "1"
+ },
+ "skirt_brim_minimal_length": {
+ "default_value": 50
+ },
+ "material_bed_temperature": {
+ "value": "50"
+ },
+ "speed_slowdown_layers": {
+ "default_value": 1
+ },
+ "speed_travel": {
+ "value": "150"
+ },
+ "skin_overlap": {
+ "value": "15"
+ },
+ "acceleration_infill": {
+ "value": "250"
+ },
+ "support_roof_material_flow": {
+ "value": "99"
+ },
+ "raft_base_jerk": {
+ "value": "5"
+ },
+ "retraction_retract_speed": {
+ "value": "30"
+ },
+ "infill_wipe_dist": {
+ "value": "0.1"
+ },
+ "jerk_wall_x": {
+ "value": "5"
+ },
+ "layer_height": {
+ "default_value": 0.2
+ },
+ "bottom_skin_expand_distance": {
+ "value": "1.2000000000000002"
+ },
+ "machine_start_gcode": {
+ "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nG28 X0 Y0;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nM420 S1 Z0.9 ;enable bed levelling\nG1 Z10 F250 ;move the platform down 10mm\nM107 ;fan off\nM42 P11 S255 ;turn on front fan\nM140 S{material_bed_temperature}\nM104 T0 S{material_print_temperature}\nM104 T1 S{material_print_temperature}\nG1 F2500 Y260\nM190 S{material_bed_temperature}\nM109 T0 S{material_print_temperature}\nM109 T1 S{material_print_temperature}\nM60 ;enable E-FADE Algorithm\nM62 A ;filament sensor off\nG92 E0 ;zero the extruded length\nT1\nG92 E0;zero the extruded length\nG1 F300 Z0.3\nG1 F1200 X20\nG1 F1200 X180 E21 ;extrude 21 mm of feed stock\nG1 F1200 E15 ;retracting 6 mm\nG1 F2000 E21\nG1 F2000 E15\nG1 F300 Z1.5\nG92 E0 ;zero the extruded length again\nT0\nG92 E0 ;zero the extruded length\nG1 F1200 Y258\nG1 F300 Z0.3\nG1 F1200 X40 E21 ;extrude 21 mm of feed stock\nG1 F1200 E15 ;retracting 6 mm\nG1 F2000 E21\nG1 F2000 E15\nG1 Z1.5\nM61 A\nM63 A ;filament sensor on\nG92 E0 ;zero the extruded length again\nM58 ;end of Start G-Code and signal retract management"
+ },
+ "travel_retract_before_outer_wall": {
+ "default_value": true
+ },
+ "xy_offset_layer_0": {
+ "value": "-0.16"
+ },
+ "adhesion_type": {
+ "default_value": "raft"
+ },
+ "min_skin_width_for_expansion": {
+ "value": "0.671279704941824"
+ },
+ "support_bottom_material_flow": {
+ "value": "99"
+ },
+ "prime_tower_position_x": {
+ "value": "1"
+ },
+ "machine_depth": {
+ "default_value": 260
+ },
+ "retraction_speed": {
+ "default_value": 30
+ },
+ "support_skip_some_zags": {
+ "default_value": true
+ },
+ "remove_empty_first_layers": {
+ "default_value": false
+ },
+ "z_seam_x": {
+ "value": "115"
+ },
+ "support_xy_distance_overhang": {
+ "value": "0.5"
+ },
+ "support_tree_wall_thickness": {
+ "value": "0.4"
+ },
+ "acceleration_print_layer_0": {
+ "value": "250"
+ },
+ "support_xy_distance": {
+ "default_value": 0.8
+ },
+ "support_roof_line_distance": {
+ "value": "0.5714285714285714"
+ },
+ "jerk_enabled": {
+ "default_value": true
+ },
+ "min_infill_area": {
+ "default_value": 1
+ },
+ "travel_avoid_supports": {
+ "default_value": true
+ },
+ "bottom_layers": {
+ "value": "3"
+ },
+ "multiple_mesh_overlap": {
+ "default_value": 0
+ },
+ "retraction_hop_enabled": {
+ "default_value": true
+ },
+ "acceleration_topbottom": {
+ "value": "250"
+ },
+ "jerk_wall": {
+ "value": "5"
+ },
+ "jerk_wall_0": {
+ "value": "5"
+ },
+ "skin_overlap_mm": {
+ "value": "0.06"
+ },
+ "retraction_min_travel": {
+ "value": "1"
+ },
+ "support_interface_material_flow": {
+ "value": "99"
+ },
+ "material_diameter": {
+ "default_value": 1.75
+ },
+ "speed_roofing": {
+ "value": "30.0"
+ },
+ "skin_outline_count": {
+ "default_value": 0
+ },
+ "skin_no_small_gaps_heuristic": {
+ "default_value": true
+ },
+ "top_bottom_pattern_0": {
+ "value": "'zigzag'"
+ },
+ "top_skin_expand_distance": {
+ "value": "1.2000000000000002"
+ },
+ "acceleration_travel_layer_0": {
+ "value": "250.0"
+ },
+ "prime_tower_min_volume": {
+ "default_value": 4
+ },
+ "switch_extruder_retraction_speeds": {
+ "default_value": 30
+ },
+ "skin_preshrink": {
+ "value": "1.2000000000000002"
+ },
+ "material_bed_temperature_layer_0": {
+ "value": "50"
+ },
+ "support_tree_collision_resolution": {
+ "value": "0.2"
+ },
+ "machine_height": {
+ "default_value": 210
+ },
+ "raft_acceleration": {
+ "value": "250"
+ },
+ "fill_outline_gaps": {
+ "default_value": true
+ },
+ "wall_x_material_flow": {
+ "value": "99"
+ },
+ "jerk_support_bottom": {
+ "value": "5"
+ },
+ "machine_end_gcode": {
+ "default_value": "M59\nG92 E1\nG1 E-1 F300\nM104 T0 S0\nM104 T1 S0\nM140 S0\nG28 X0 Y0\nM84\nM106 S0\nM107"
+ },
+ "infill_sparse_density": {
+ "default_value": 15
+ },
+ "meshfix_maximum_deviation": {
+ "default_value": 0.005
+ },
+ "wall_0_material_flow": {
+ "value": "99"
+ },
+ "material_adhesion_tendency": {
+ "default_value": 0
+ },
+ "prime_tower_flow": {
+ "value": "99"
+ },
+ "prime_tower_position_y": {
+ "value": "1"
+ },
+ "support_material_flow": {
+ "value": "99"
+ },
+ "retract_at_layer_change": {
+ "default_value": true
+ },
+ "machine_extruder_count": {
+ "default_value": 2
+ },
+ "wall_thickness": {
+ "default_value": 1.2
+ },
+ "support_infill_sparse_thickness": {
+ "value": "0.2"
+ },
+ "raft_surface_acceleration": {
+ "value": "250"
+ },
+ "roofing_layer_count": {
+ "value": "1"
+ },
+ "skirt_brim_line_width": {
+ "value": "0.5"
+ },
+ "jerk_support": {
+ "value": "5"
+ },
+ "raft_surface_jerk": {
+ "value": "5"
+ },
+ "speed_equalize_flow_max": {
+ "default_value": 40
+ },
+ "raft_surface_speed": {
+ "value": "30.0"
+ },
+ "jerk_travel": {
+ "value": "5"
+ },
+ "support_zag_skip_count": {
+ "value": "8"
+ },
+ "retraction_combing": {
+ "default_value": "infill"
+ },
+ "raft_interface_line_spacing": {
+ "value": "0.4"
+ },
+ "layer_height_0": {
+ "default_value": 0.2
+ },
+ "extruders_enabled_count": {
+ "value": "2"
+ },
+ "support_line_distance": {
+ "value": "1.3333333333333333"
+ },
+ "support_roof_density": {
+ "value": "70"
+ },
+ "raft_base_line_spacing": {
+ "value": "0.8"
+ },
+ "acceleration_prime_tower": {
+ "value": "250"
+ },
+ "skin_material_flow": {
+ "value": "99"
+ },
+ "support_z_distance": {
+ "default_value": 0.22
+ },
+ "bottom_skin_preshrink": {
+ "value": "1.2000000000000002"
+ },
+ "jerk_skirt_brim": {
+ "value": "5"
+ },
+ "z_seam_y": {
+ "value": "180"
+ },
+ "skirt_line_count": {
+ "default_value": 2
+ },
+ "raft_margin": {
+ "default_value": 4
+ },
+ "infill_material_flow": {
+ "value": "99"
+ },
+ "wipe_retraction_retract_speed": {
+ "value": "30"
+ },
+ "z_seam_corner": {
+ "default_value": "z_seam_corner_weighted"
+ },
+ "support_roof_height": {
+ "value": "0.4"
+ },
+ "top_layers": {
+ "value": "4"
+ },
+ "support_infill_rate": {
+ "value": "30"
+ },
+ "raft_interface_speed": {
+ "value": "35"
+ },
+ "default_material_print_temperature": {
+ "default_value": 195
+ },
+ "acceleration_layer_0": {
+ "value": "250"
+ },
+ "support_skip_zag_per_mm": {
+ "default_value": 10
+ },
+ "material_initial_print_temperature": {
+ "value": "195"
+ },
+ "raft_interface_jerk": {
+ "value": "5"
+ },
+ "machine_width": {
+ "default_value": 210
+ },
+ "wall_line_count": {
+ "value": "3"
+ },
+ "retraction_amount": {
+ "default_value": 3
+ },
+ "infill_sparse_thickness": {
+ "value": "0.2"
+ },
+ "support_initial_layer_line_distance": {
+ "value": "1.3333333333333333"
+ },
+ "jerk_support_infill": {
+ "value": "5"
+ },
+ "acceleration_roofing": {
+ "value": "250"
+ },
+ "retraction_extrusion_window": {
+ "value": "3"
+ },
+ "raft_interface_line_width": {
+ "value": "0.4"
+ },
+ "acceleration_support_roof": {
+ "value": "250"
+ },
+ "support_brim_line_count": {
+ "value": "16"
+ },
+ "layer_0_z_overlap": {
+ "value": "0.1"
+ },
+ "support_angle": {
+ "default_value": 60
+ },
+ "machine_heated_bed": {
+ "default_value": true
+ },
+ "raft_surface_thickness": {
+ "value": "0.2"
+ },
+ "cool_min_layer_time": {
+ "default_value": 10
+ },
+ "gantry_height": {
+ "value": "210"
+ },
+ "raft_airgap": {
+ "default_value": 0.2
+ },
+ "acceleration_skirt_brim": {
+ "value": "250"
+ },
+ "skirt_brim_material_flow": {
+ "value": "99"
+ },
+ "jerk_infill": {
+ "value": "5"
+ },
+ "roofing_material_flow": {
+ "value": "99"
+ },
+ "support_use_towers": {
+ "default_value": false
+ },
+ "ooze_shield_angle": {
+ "default_value": 50
+ },
+ "material_flow": {
+ "default_value": 99
+ },
+ "speed_travel_layer_0": {
+ "value": "75.0"
+ },
+ "raft_base_acceleration": {
+ "value": "250"
+ },
+ "retraction_count_max": {
+ "default_value": 40
+ },
+ "ooze_shield_dist": {
+ "default_value": 4
+ },
+ "acceleration_support": {
+ "value": "250"
+ },
+ "max_skin_angle_for_expansion": {
+ "default_value": 50
+ },
+ "coasting_enable": {
+ "default_value": true
+ },
+ "brim_width": {
+ "default_value": 10
+ },
+ "acceleration_support_infill": {
+ "value": "250"
+ },
+ "retraction_prime_speed": {
+ "value": "30"
+ },
+ "raft_base_speed": {
+ "value": "35"
+ },
+ "acceleration_wall_0": {
+ "value": "250"
+ },
+ "xy_offset": {
+ "default_value": -0.16
+ },
+ "prime_tower_size": {
+ "default_value": 1
+ },
+ "jerk_ironing": {
+ "value": "5"
+ },
+ "switch_extruder_prime_speed": {
+ "value": "30"
+ },
+ "raft_jerk": {
+ "value": "5"
+ },
+ "top_skin_preshrink": {
+ "value": "1.2000000000000002"
+ },
+ "material_print_temperature": {
+ "value": "195"
+ },
+ "wall_material_flow": {
+ "value": "99"
+ },
+ "jerk_roofing": {
+ "value": "5"
+ },
+ "cool_fan_full_at_height": {
+ "value": "0"
+ },
+ "acceleration_wall_x": {
+ "value": "250"
+ },
+ "support_bottom_distance": {
+ "value": "0.23"
+ },
+ "cool_min_speed": {
+ "default_value": 15
+ },
+ "default_material_bed_temperature": {
+ "default_value": 50
+ },
+ "raft_interface_thickness": {
+ "value": "0.2"
+ }
+ }
+}
diff --git a/resources/definitions/strateo3d.def.json b/resources/definitions/strateo3d.def.json
index a3710fb9af..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": { "default_value": 40 },
+ "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/structur3d_discov3ry1_complete_um2plus.def.json b/resources/definitions/structur3d_discov3ry1_complete_um2plus.def.json
index a7f4b7e549..e4893cacac 100644
--- a/resources/definitions/structur3d_discov3ry1_complete_um2plus.def.json
+++ b/resources/definitions/structur3d_discov3ry1_complete_um2plus.def.json
@@ -55,9 +55,6 @@
"line_width": {
"value": "round(machine_nozzle_size * 0.875, 2)"
},
- "speed_layer_0": {
- "default_value": 10
- },
"speed_support": {
"value": "speed_wall_0"
},
diff --git a/resources/definitions/tam.def.json b/resources/definitions/tam.def.json
index 67a4bb8eab..211049ca3d 100644
--- a/resources/definitions/tam.def.json
+++ b/resources/definitions/tam.def.json
@@ -37,7 +37,6 @@
"machine_center_is_zero": { "default_value": false },
"speed_print": { "default_value": 60 },
- "speed_travel": { "default_value": 200 },
"retraction_amount": { "default_value": 0.4 },
"retraction_speed": { "default_value": 35},
diff --git a/resources/definitions/tevo_tarantula.def.json b/resources/definitions/tevo_tarantula.def.json
index 038cc3a318..f4bf2b901e 100644
--- a/resources/definitions/tevo_tarantula.def.json
+++ b/resources/definitions/tevo_tarantula.def.json
@@ -23,7 +23,7 @@
"machine_height": { "default_value": 200 },
"machine_depth": { "default_value": 200 },
"machine_center_is_zero": { "default_value": false },
- "machine_head_polygon":
+ "machine_head_with_fans_polygon":
{
"default_value":
[
diff --git a/resources/definitions/tevo_tornado.def.json b/resources/definitions/tevo_tornado.def.json
index 67f25ec9d8..3b6c431feb 100644
--- a/resources/definitions/tevo_tornado.def.json
+++ b/resources/definitions/tevo_tornado.def.json
@@ -28,7 +28,7 @@
"machine_center_is_zero": {
"default_value": false
},
- "machine_head_polygon": {
+ "machine_head_with_fans_polygon": {
"default_value": [
[-30, 34],
[-30, -32],
diff --git a/resources/definitions/tizyx_evy.def.json b/resources/definitions/tizyx_evy.def.json
index f92f679677..57c7337196 100644
--- a/resources/definitions/tizyx_evy.def.json
+++ b/resources/definitions/tizyx_evy.def.json
@@ -50,13 +50,8 @@
"fill_outline_gaps": { "default_value": true},
"infill_sparse_density": { "default_value": 15},
"retraction_amount": { "default_value": 2.5},
- "retraction_min_travel": { "default_value": 2},
"retraction_speed": { "default_value": 30},
"speed_print": { "default_value": 60},
- "speed_topbottom": { "default_value": 50},
- "speed_wall_0": { "default_value": 40},
- "top_layers": { "default_value": 4},
- "wall_line_count": { "default_value": 2},
"cool_min_layer_time": { "default_value": 11},
"layer_height": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" },
"layer_height_0": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" },
diff --git a/resources/definitions/ubuild-3d_mr_bot_280.def.json b/resources/definitions/ubuild-3d_mr_bot_280.def.json
index 060752387b..255d8f032b 100644
--- a/resources/definitions/ubuild-3d_mr_bot_280.def.json
+++ b/resources/definitions/ubuild-3d_mr_bot_280.def.json
@@ -1,5 +1,4 @@
{
- "id": "ubuild-3d_mr_bot_280",
"version": 2,
"name": "uBuild-3D Mr Bot 280",
"inherits": "fdmprinter",
@@ -24,12 +23,9 @@
"machine_height": { "default_value": 275 },
"machine_depth": { "default_value": 275 },
"machine_center_is_zero": { "default_value": false },
- "material_bed_temperature": { "default_value": 70 },
"layer_height_0": { "default_value": 0.1 },
"retraction_amount": { "default_value": 2 },
"retraction_speed": { "default_value": 50 },
- "retraction_retract_speed": { "default_value": 50 },
- "retraction_prime_speed": { "default_value": 30 },
"adhesion_type": { "default_value": "skirt" },
"machine_nozzle_heat_up_speed": { "default_value": 2 },
"machine_nozzle_cool_down_speed": { "default_value": 2 },
diff --git a/resources/definitions/ultimaker2.def.json b/resources/definitions/ultimaker2.def.json
index 285f5bed08..40fbdaf709 100644
--- a/resources/definitions/ultimaker2.def.json
+++ b/resources/definitions/ultimaker2.def.json
@@ -14,8 +14,6 @@
"has_materials": false,
"has_machine_quality": true,
"preferred_variant_name": "0.4 mm",
- "first_start_actions": ["UM2UpgradeSelection"],
- "supported_actions":["UM2UpgradeSelection"],
"machine_extruder_trains":
{
"0": "ultimaker2_extruder_0"
@@ -90,9 +88,6 @@
},
"machine_acceleration": {
"default_value": 3000
- },
- "machine_nozzle_temp_enabled": {
- "default_value": false
}
}
}
diff --git a/resources/definitions/ultimaker2_extended_olsson.def.json b/resources/definitions/ultimaker2_extended_olsson.def.json
new file mode 100644
index 0000000000..d2eb7f9a5d
--- /dev/null
+++ b/resources/definitions/ultimaker2_extended_olsson.def.json
@@ -0,0 +1,12 @@
+{
+ "version": 2,
+ "name": "Ultimaker 2 Extended with Olsson",
+ "inherits": "ultimaker2_extended",
+ "metadata": {
+ "has_variants": true
+ },
+
+ "overrides": {
+ "machine_name": { "default_value": "Ultimaker 2 Extended with Olsson" }
+ }
+}
diff --git a/resources/definitions/ultimaker2_go.def.json b/resources/definitions/ultimaker2_go.def.json
index 9e374b2c88..774d215bef 100644
--- a/resources/definitions/ultimaker2_go.def.json
+++ b/resources/definitions/ultimaker2_go.def.json
@@ -11,7 +11,6 @@
"platform": "ultimaker2go_platform.obj",
"platform_texture": "Ultimaker2Gobackplate.png",
"platform_offset": [0, 0, 0],
- "first_start_actions": [],
"machine_extruder_trains":
{
"0": "ultimaker2_go_extruder_0"
diff --git a/resources/definitions/ultimaker2_olsson.def.json b/resources/definitions/ultimaker2_olsson.def.json
new file mode 100644
index 0000000000..2f8b877942
--- /dev/null
+++ b/resources/definitions/ultimaker2_olsson.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Ultimaker 2 with Olsson Block",
+ "inherits": "ultimaker2",
+ "metadata": {
+ "has_variants": true,
+ "quality_definition": "ultimaker2"
+ },
+
+ "overrides": {
+ "machine_name": { "default_value": "Ultimaker 2 with Olsson Block" }
+ }
+}
diff --git a/resources/definitions/ultimaker2_plus.def.json b/resources/definitions/ultimaker2_plus.def.json
index 65ee8f063b..633e50bdba 100644
--- a/resources/definitions/ultimaker2_plus.def.json
+++ b/resources/definitions/ultimaker2_plus.def.json
@@ -37,9 +37,6 @@
"line_width": {
"value": "round(machine_nozzle_size * 0.875, 2)"
},
- "speed_layer_0": {
- "default_value": 20
- },
"speed_support": {
"value": "speed_wall_0"
},
diff --git a/resources/definitions/ultimaker_s3.def.json b/resources/definitions/ultimaker_s3.def.json
index f7f3a038fe..efdc7cca0a 100644
--- a/resources/definitions/ultimaker_s3.def.json
+++ b/resources/definitions/ultimaker_s3.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker_s3",
"version": 2,
"name": "Ultimaker S3",
"inherits": "ultimaker",
@@ -68,8 +67,6 @@
"extruder_prime_pos_abs": { "default_value": true },
"machine_start_gcode": { "default_value": "" },
"machine_end_gcode": { "default_value": "" },
- "prime_tower_position_x": { "default_value": 345 },
- "prime_tower_position_y": { "default_value": 222.5 },
"prime_blob_enable": { "enabled": true, "default_value": false },
"speed_travel":
diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json
index fef8c87c27..dcd44a371a 100644
--- a/resources/definitions/ultimaker_s5.def.json
+++ b/resources/definitions/ultimaker_s5.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker_s5",
"version": 2,
"name": "Ultimaker S5",
"inherits": "ultimaker",
@@ -70,8 +69,6 @@
"extruder_prime_pos_abs": { "default_value": true },
"machine_start_gcode": { "default_value": "" },
"machine_end_gcode": { "default_value": "" },
- "prime_tower_position_x": { "default_value": 345 },
- "prime_tower_position_y": { "default_value": 222.5 },
"prime_blob_enable": { "enabled": true, "default_value": false },
"speed_travel":
diff --git a/resources/definitions/uni_print_3d.def.json b/resources/definitions/uni_print_3d.def.json
index 427177176a..99d9eab1e0 100644
--- a/resources/definitions/uni_print_3d.def.json
+++ b/resources/definitions/uni_print_3d.def.json
@@ -1,5 +1,4 @@
{
- "id": "uni_print_3d",
"name": "UNI-PRINT-3D",
"version": 2,
"inherits": "fdmprinter",
diff --git a/resources/definitions/vertex_k8400.def.json b/resources/definitions/vertex_k8400.def.json
index 6bba095978..bbeb8510ba 100644
--- a/resources/definitions/vertex_k8400.def.json
+++ b/resources/definitions/vertex_k8400.def.json
@@ -20,12 +20,6 @@
"machine_heated_bed": {
"default_value": true
},
- "material_bed_temperature": {
- "default_value": 0
- },
- "material_bed_temperature_layer_0": {
- "default_value": 0
- },
"machine_width": {
"default_value": 200
},
@@ -41,14 +35,6 @@
"machine_center_is_zero": {
"default_value": false
},
- "machine_head_polygon": {
- "default_value": [
- [-60, -18],
- [-60, 40],
- [18, 40],
- [18, -18]
- ]
- },
"machine_head_with_fans_polygon": {
"default_value": [
[-60, -40],
@@ -64,10 +50,10 @@
"default_value": "RepRap (Marlin/Sprinter)"
},
"machine_start_gcode": {
- "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E3 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..."
+ "default_value": "M104 T0 S{material_print_temperature_layer_0}\nG28 ;Home extruder\nG90 ;Absolute positioning\nM82 ;Extruder in absolute mode\nG1 Z1 F100\nG92 E0 ;Reset extruder position\nM109 T0 S{material_print_temperature_layer_0}\nG1 E20 F100\nG92 E0 ;Reset extruder position"
},
"machine_end_gcode": {
- "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning"
+ "default_value": "G1 X0 Y0 Z130 ;Get extruder out of way\nM107 ;Turn off fan\n;Disable all extruders\nG91 ;Relative positioning\nT0\nG1 E-1 ;Reduce filament pressure\nM104 T0 S0\nG90 ;Absolute positioning\nG92 E0 ;Reset extruder position\nM140 S0 ;Disable heated bed\nM84 ;Turn steppers off"
}
}
}
\ No newline at end of file
diff --git a/resources/definitions/vertex_k8400_dual.def.json b/resources/definitions/vertex_k8400_dual.def.json
index 9d014b9cf8..498d550429 100644
--- a/resources/definitions/vertex_k8400_dual.def.json
+++ b/resources/definitions/vertex_k8400_dual.def.json
@@ -18,12 +18,6 @@
"machine_heated_bed": {
"default_value": true
},
- "material_bed_temperature": {
- "default_value": 0
- },
- "material_bed_temperature_layer_0": {
- "default_value": 0
- },
"machine_width": {
"default_value": 223.7
},
@@ -42,14 +36,6 @@
"machine_use_extruder_offset_to_offset_coords": {
"default_value": true
},
- "machine_head_polygon": {
- "default_value": [
- [-60, -18],
- [-60, 40],
- [18, 40],
- [18, -18]
- ]
- },
"machine_head_with_fans_polygon": {
"default_value": [
[-60, -40],
diff --git a/resources/definitions/vertex_nano_k8600.def.json b/resources/definitions/vertex_nano_k8600.def.json
index 02697a1152..ef9552caf3 100644
--- a/resources/definitions/vertex_nano_k8600.def.json
+++ b/resources/definitions/vertex_nano_k8600.def.json
@@ -19,12 +19,6 @@
"machine_heated_bed": {
"default_value": false
},
- "material_bed_temperature": {
- "default_value": 0
- },
- "material_bed_temperature_layer_0": {
- "default_value": 0
- },
"machine_width": {
"default_value": 80
},
diff --git a/resources/definitions/wanhao_d9.def.json b/resources/definitions/wanhao_d9.def.json
index 39ad139ff8..ac4d41fa40 100644
--- a/resources/definitions/wanhao_d9.def.json
+++ b/resources/definitions/wanhao_d9.def.json
@@ -31,8 +31,6 @@
"support_angle": { "default_value": 60 },
"support_enable": { "default_value": true },
"layer_height_0": { "default_value": 0.15 },
- "top_thickness": { "default_value": 0.6 },
- "material_print_temperature": { "default_value": 190 },
"layer_height": { "default_value": 0.2 },
"speed_print": { "default_value": 30 },
"adhesion_type": { "default_value": "raft" },
diff --git a/resources/definitions/zone3d_printer.def.json b/resources/definitions/zone3d_printer.def.json
index 5aa015cace..4c72422788 100644
--- a/resources/definitions/zone3d_printer.def.json
+++ b/resources/definitions/zone3d_printer.def.json
@@ -16,9 +16,7 @@
"overrides": {
"prime_tower_size": { "default_value": 10.350983390135314 },
- "material_print_temperature": { "default_value": 260 },
"layer_height": { "default_value": 0.14 },
- "speed_travel": { "default_value": 150 },
"machine_extruder_count": { "default_value": 1 },
"machine_heated_bed": { "default_value": true },
"machine_center_is_zero": { "default_value": false },
diff --git a/resources/extruders/101Hero_extruder_0.def.json b/resources/extruders/101Hero_extruder_0.def.json
index 82c06e40d6..21c892133c 100644
--- a/resources/extruders/101Hero_extruder_0.def.json
+++ b/resources/extruders/101Hero_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "101Hero_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/3dator_extruder_0.def.json b/resources/extruders/3dator_extruder_0.def.json
index 6749eb7bb4..97b03518f7 100644
--- a/resources/extruders/3dator_extruder_0.def.json
+++ b/resources/extruders/3dator_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "3dator_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/Mark2_extruder1.def.json b/resources/extruders/Mark2_extruder1.def.json
index 915c331083..27becf88ff 100644
--- a/resources/extruders/Mark2_extruder1.def.json
+++ b/resources/extruders/Mark2_extruder1.def.json
@@ -1,5 +1,4 @@
{
- "id": "Mark2_extruder1",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/Mark2_extruder2.def.json b/resources/extruders/Mark2_extruder2.def.json
index 2c05a09391..ac654d9c00 100644
--- a/resources/extruders/Mark2_extruder2.def.json
+++ b/resources/extruders/Mark2_extruder2.def.json
@@ -1,5 +1,4 @@
{
- "id": "Mark2_extruder2",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/abax_pri3_extruder_0.def.json b/resources/extruders/abax_pri3_extruder_0.def.json
index 27e86d6042..618ca7f596 100644
--- a/resources/extruders/abax_pri3_extruder_0.def.json
+++ b/resources/extruders/abax_pri3_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "abax_pri3_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/abax_pri5_extruder_0.def.json b/resources/extruders/abax_pri5_extruder_0.def.json
index 842e76e5f3..4a96b5e12e 100644
--- a/resources/extruders/abax_pri5_extruder_0.def.json
+++ b/resources/extruders/abax_pri5_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "abax_pri5_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/abax_titan_extruder_0.def.json b/resources/extruders/abax_titan_extruder_0.def.json
index 79e1974def..078b9f0470 100644
--- a/resources/extruders/abax_titan_extruder_0.def.json
+++ b/resources/extruders/abax_titan_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "abax_titan_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/alfawise_u20_extruder_0.def.json b/resources/extruders/alfawise_u20_extruder_0.def.json
index 2fbe3f1772..6bb2bde534 100644
--- a/resources/extruders/alfawise_u20_extruder_0.def.json
+++ b/resources/extruders/alfawise_u20_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "alfawise_u20_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/alfawise_u30_extruder_0.def.json b/resources/extruders/alfawise_u30_extruder_0.def.json
index 37f59eb567..4014b5ab62 100644
--- a/resources/extruders/alfawise_u30_extruder_0.def.json
+++ b/resources/extruders/alfawise_u30_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "alfawise_u30_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/alya3dp_extruder_0.def.json b/resources/extruders/alya3dp_extruder_0.def.json
index 3676f01ad2..5e05210e2c 100644
--- a/resources/extruders/alya3dp_extruder_0.def.json
+++ b/resources/extruders/alya3dp_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "alya3dp_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/anet_a6_extruder_0.def.json b/resources/extruders/anet_a6_extruder_0.def.json
index 704d3a55ca..c87160a542 100644
--- a/resources/extruders/anet_a6_extruder_0.def.json
+++ b/resources/extruders/anet_a6_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "anet_a6_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/anycubic_4max_extruder_0.def.json b/resources/extruders/anycubic_4max_extruder_0.def.json
index 5c2ab8d479..9ea55928b8 100644
--- a/resources/extruders/anycubic_4max_extruder_0.def.json
+++ b/resources/extruders/anycubic_4max_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "anycubic_4max_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/anycubic_chiron_extruder_0.def.json b/resources/extruders/anycubic_chiron_extruder_0.def.json
index cc48df08bb..b4117c755a 100644
--- a/resources/extruders/anycubic_chiron_extruder_0.def.json
+++ b/resources/extruders/anycubic_chiron_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "anycubic_chiron_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/anycubic_i3_mega_extruder_0.def.json b/resources/extruders/anycubic_i3_mega_extruder_0.def.json
index 6d9c330536..f15eab4829 100644
--- a/resources/extruders/anycubic_i3_mega_extruder_0.def.json
+++ b/resources/extruders/anycubic_i3_mega_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "anycubic_i3_mega_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/bfb_extruder_0.def.json b/resources/extruders/bfb_extruder_0.def.json
index 88c81ee03e..6dd995d098 100644
--- a/resources/extruders/bfb_extruder_0.def.json
+++ b/resources/extruders/bfb_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "bfb_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/bibo2_dual_extruder_0.def.json b/resources/extruders/bibo2_dual_extruder_0.def.json
index f83801fa0c..91508ecc6d 100644
--- a/resources/extruders/bibo2_dual_extruder_0.def.json
+++ b/resources/extruders/bibo2_dual_extruder_0.def.json
@@ -1,46 +1,45 @@
{
- "id": "BIBO1",
- "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 5f479ba54b..129ad27273 100644
--- a/resources/extruders/bibo2_dual_extruder_1.def.json
+++ b/resources/extruders/bibo2_dual_extruder_1.def.json
@@ -1,46 +1,45 @@
{
- "id": "BIBO2",
- "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/bq_hephestos_2_extruder_0.def.json b/resources/extruders/bq_hephestos_2_extruder_0.def.json
index 833907937d..d58d8d755a 100644
--- a/resources/extruders/bq_hephestos_2_extruder_0.def.json
+++ b/resources/extruders/bq_hephestos_2_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "bq_hephestos_2_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/bq_hephestos_extruder_0.def.json b/resources/extruders/bq_hephestos_extruder_0.def.json
index 753778f399..dc9b42d66d 100644
--- a/resources/extruders/bq_hephestos_extruder_0.def.json
+++ b/resources/extruders/bq_hephestos_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "bq_hephestos_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/bq_hephestos_xl_extruder_0.def.json b/resources/extruders/bq_hephestos_xl_extruder_0.def.json
index 91cac04dc9..a52032f129 100644
--- a/resources/extruders/bq_hephestos_xl_extruder_0.def.json
+++ b/resources/extruders/bq_hephestos_xl_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "bq_hephestos_xl_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/bq_witbox_2_extruder_0.def.json b/resources/extruders/bq_witbox_2_extruder_0.def.json
index 04107f4471..62fe62ad0b 100644
--- a/resources/extruders/bq_witbox_2_extruder_0.def.json
+++ b/resources/extruders/bq_witbox_2_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "bq_witbox_2_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/bq_witbox_extruder_0.def.json b/resources/extruders/bq_witbox_extruder_0.def.json
index d3a5c677af..37b1492676 100644
--- a/resources/extruders/bq_witbox_extruder_0.def.json
+++ b/resources/extruders/bq_witbox_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "bq_witbox_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/builder_premium_large_front.def.json b/resources/extruders/builder_premium_large_front.def.json
index 4834bc8fd9..dc1c557304 100644
--- a/resources/extruders/builder_premium_large_front.def.json
+++ b/resources/extruders/builder_premium_large_front.def.json
@@ -1,5 +1,4 @@
{
- "id": "builder_premium_large_front",
"version": 2,
"name": "Front Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/builder_premium_large_rear.def.json b/resources/extruders/builder_premium_large_rear.def.json
index f257749ea4..5dbe6d30c9 100644
--- a/resources/extruders/builder_premium_large_rear.def.json
+++ b/resources/extruders/builder_premium_large_rear.def.json
@@ -1,5 +1,4 @@
{
- "id": "builder_premium_large_rear",
"version": 2,
"name": "Rear Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/builder_premium_medium_front.def.json b/resources/extruders/builder_premium_medium_front.def.json
index 05dcb3d49f..2d38e48aab 100644
--- a/resources/extruders/builder_premium_medium_front.def.json
+++ b/resources/extruders/builder_premium_medium_front.def.json
@@ -1,5 +1,4 @@
{
- "id": "builder_premium_medium_front",
"version": 2,
"name": "Front Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/builder_premium_medium_rear.def.json b/resources/extruders/builder_premium_medium_rear.def.json
index 3461e07f09..0a789c38f1 100644
--- a/resources/extruders/builder_premium_medium_rear.def.json
+++ b/resources/extruders/builder_premium_medium_rear.def.json
@@ -1,5 +1,4 @@
{
- "id": "builder_premium_medium_rear",
"version": 2,
"name": "Rear Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/builder_premium_small_front.def.json b/resources/extruders/builder_premium_small_front.def.json
index 7a1c352c73..b36c535aeb 100644
--- a/resources/extruders/builder_premium_small_front.def.json
+++ b/resources/extruders/builder_premium_small_front.def.json
@@ -1,5 +1,4 @@
{
- "id": "builder_premium_small_front",
"version": 2,
"name": "Front Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/builder_premium_small_rear.def.json b/resources/extruders/builder_premium_small_rear.def.json
index 7085236a5c..8e00d0cc39 100644
--- a/resources/extruders/builder_premium_small_rear.def.json
+++ b/resources/extruders/builder_premium_small_rear.def.json
@@ -1,5 +1,4 @@
{
- "id": "builder_premium_small_rear",
"version": 2,
"name": "Rear Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/cartesio_extruder_0.def.json b/resources/extruders/cartesio_extruder_0.def.json
index 6d2b5f634e..ad27d4854c 100644
--- a/resources/extruders/cartesio_extruder_0.def.json
+++ b/resources/extruders/cartesio_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "cartesio_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/cartesio_extruder_1.def.json b/resources/extruders/cartesio_extruder_1.def.json
index 3d49a220c0..1699a9c6a8 100644
--- a/resources/extruders/cartesio_extruder_1.def.json
+++ b/resources/extruders/cartesio_extruder_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "cartesio_extruder_1",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/cartesio_extruder_2.def.json b/resources/extruders/cartesio_extruder_2.def.json
index 1f8f8b9ca9..2521ada681 100644
--- a/resources/extruders/cartesio_extruder_2.def.json
+++ b/resources/extruders/cartesio_extruder_2.def.json
@@ -1,5 +1,4 @@
{
- "id": "cartesio_extruder_2",
"version": 2,
"name": "Extruder 3",
"inherits": "fdmextruder",
diff --git a/resources/extruders/cartesio_extruder_3.def.json b/resources/extruders/cartesio_extruder_3.def.json
index 0b1cfe493e..c844e7ce54 100644
--- a/resources/extruders/cartesio_extruder_3.def.json
+++ b/resources/extruders/cartesio_extruder_3.def.json
@@ -1,5 +1,4 @@
{
- "id": "cartesio_extruder_3",
"version": 2,
"name": "Extruder 4",
"inherits": "fdmextruder",
diff --git a/resources/extruders/cocoon_create_modelmaker_extruder_0.def.json b/resources/extruders/cocoon_create_modelmaker_extruder_0.def.json
index 26d847483d..dfa06c776a 100644
--- a/resources/extruders/cocoon_create_modelmaker_extruder_0.def.json
+++ b/resources/extruders/cocoon_create_modelmaker_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "cocoon_create_modelmaker_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/cr-x_extruder_0.def.json b/resources/extruders/cr-x_extruder_0.def.json
index 8135815afb..d9b7b03021 100644
--- a/resources/extruders/cr-x_extruder_0.def.json
+++ b/resources/extruders/cr-x_extruder_0.def.json
@@ -1,10 +1,9 @@
{
- "id": "cr-x_extruder_0",
"version": 2,
"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 9313f2ea78..8e763df64f 100644
--- a/resources/extruders/cr-x_extruder_1.def.json
+++ b/resources/extruders/cr-x_extruder_1.def.json
@@ -1,10 +1,9 @@
{
- "id": "cr-x_extruder_1",
"version": 2,
"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 7d45bb8e8a..95883d0f69 100644
--- a/resources/extruders/creatable_d3_extruder_0.def.json
+++ b/resources/extruders/creatable_d3_extruder_0.def.json
@@ -1,10 +1,9 @@
{
- "id": "creatable_d3_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
"metadata": {
- "machine": "Creatable_D3",
+ "machine": "creatable_d3",
"position": "0"
},
diff --git a/resources/extruders/cubicon_3dp_110f_extruder_0.def.json b/resources/extruders/cubicon_3dp_110f_extruder_0.def.json
index 9c854fd2a1..048c12b992 100644
--- a/resources/extruders/cubicon_3dp_110f_extruder_0.def.json
+++ b/resources/extruders/cubicon_3dp_110f_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "cubicon_3dp_110f_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/cubicon_3dp_210f_extruder_0.def.json b/resources/extruders/cubicon_3dp_210f_extruder_0.def.json
index 8a8573760a..07fe7f3769 100644
--- a/resources/extruders/cubicon_3dp_210f_extruder_0.def.json
+++ b/resources/extruders/cubicon_3dp_210f_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "cubicon_3dp_210f_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/cubicon_3dp_310f_extruder_0.def.json b/resources/extruders/cubicon_3dp_310f_extruder_0.def.json
index 4edbbd5a6c..8dc336877f 100644
--- a/resources/extruders/cubicon_3dp_310f_extruder_0.def.json
+++ b/resources/extruders/cubicon_3dp_310f_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "cubicon_3dp_310f_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/cubicon_dual_pro_a30_extruder_0.def.json b/resources/extruders/cubicon_dual_pro_a30_extruder_0.def.json
index 689be873e0..6c8993e799 100644
--- a/resources/extruders/cubicon_dual_pro_a30_extruder_0.def.json
+++ b/resources/extruders/cubicon_dual_pro_a30_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "cubicon_dual_pro_a30_extruder_1",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/cubicon_dual_pro_a30_extruder_1.def.json b/resources/extruders/cubicon_dual_pro_a30_extruder_1.def.json
index c01a05a894..ccdfdee1f7 100644
--- a/resources/extruders/cubicon_dual_pro_a30_extruder_1.def.json
+++ b/resources/extruders/cubicon_dual_pro_a30_extruder_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "cubicon_dual_pro_a30_extruder_2",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/cubicon_style_plus_a15_extruder_0.def.json b/resources/extruders/cubicon_style_plus_a15_extruder_0.def.json
index 18621ba429..12d022cd1e 100644
--- a/resources/extruders/cubicon_style_plus_a15_extruder_0.def.json
+++ b/resources/extruders/cubicon_style_plus_a15_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "cubicon_style_plus_a15_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/custom_extruder_1.def.json b/resources/extruders/custom_extruder_1.def.json
index 859c6a2f22..942f3e96b9 100644
--- a/resources/extruders/custom_extruder_1.def.json
+++ b/resources/extruders/custom_extruder_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "custom_extruder_1",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/custom_extruder_2.def.json b/resources/extruders/custom_extruder_2.def.json
index eecda5dfcd..cd43efa994 100644
--- a/resources/extruders/custom_extruder_2.def.json
+++ b/resources/extruders/custom_extruder_2.def.json
@@ -1,5 +1,4 @@
{
- "id": "custom_extruder_2",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/custom_extruder_3.def.json b/resources/extruders/custom_extruder_3.def.json
index 77909ec05d..be5bdd0e6a 100644
--- a/resources/extruders/custom_extruder_3.def.json
+++ b/resources/extruders/custom_extruder_3.def.json
@@ -1,5 +1,4 @@
{
- "id": "custom_extruder_3",
"version": 2,
"name": "Extruder 3",
"inherits": "fdmextruder",
diff --git a/resources/extruders/custom_extruder_4.def.json b/resources/extruders/custom_extruder_4.def.json
index be792c3a8e..ce1df0a5f5 100644
--- a/resources/extruders/custom_extruder_4.def.json
+++ b/resources/extruders/custom_extruder_4.def.json
@@ -1,5 +1,4 @@
{
- "id": "custom_extruder_4",
"version": 2,
"name": "Extruder 4",
"inherits": "fdmextruder",
diff --git a/resources/extruders/custom_extruder_5.def.json b/resources/extruders/custom_extruder_5.def.json
index ea64605041..beb4786505 100644
--- a/resources/extruders/custom_extruder_5.def.json
+++ b/resources/extruders/custom_extruder_5.def.json
@@ -1,5 +1,4 @@
{
- "id": "custom_extruder_5",
"version": 2,
"name": "Extruder 5",
"inherits": "fdmextruder",
diff --git a/resources/extruders/custom_extruder_6.def.json b/resources/extruders/custom_extruder_6.def.json
index fd27fadace..7f1e1a1343 100644
--- a/resources/extruders/custom_extruder_6.def.json
+++ b/resources/extruders/custom_extruder_6.def.json
@@ -1,5 +1,4 @@
{
- "id": "custom_extruder_6",
"version": 2,
"name": "Extruder 6",
"inherits": "fdmextruder",
diff --git a/resources/extruders/custom_extruder_7.def.json b/resources/extruders/custom_extruder_7.def.json
index cf003d1a6b..e4239f35f0 100644
--- a/resources/extruders/custom_extruder_7.def.json
+++ b/resources/extruders/custom_extruder_7.def.json
@@ -1,5 +1,4 @@
{
- "id": "custom_extruder_7",
"version": 2,
"name": "Extruder 7",
"inherits": "fdmextruder",
diff --git a/resources/extruders/custom_extruder_8.def.json b/resources/extruders/custom_extruder_8.def.json
index f418a55186..7671825792 100644
--- a/resources/extruders/custom_extruder_8.def.json
+++ b/resources/extruders/custom_extruder_8.def.json
@@ -1,5 +1,4 @@
{
- "id": "custom_extruder_8",
"version": 2,
"name": "Extruder 8",
"inherits": "fdmextruder",
diff --git a/resources/extruders/delta_go_extruder_0.def.json b/resources/extruders/delta_go_extruder_0.def.json
index 2262270dfb..330cde08bf 100644
--- a/resources/extruders/delta_go_extruder_0.def.json
+++ b/resources/extruders/delta_go_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "delta_go_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/deltabot_extruder_0.def.json b/resources/extruders/deltabot_extruder_0.def.json
index e13d6a6ee3..d4773ccf9f 100644
--- a/resources/extruders/deltabot_extruder_0.def.json
+++ b/resources/extruders/deltabot_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "deltabot_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/deltacomb_extruder_0.def.json b/resources/extruders/deltacomb_extruder_0.def.json
index 64c512b7fe..875655d5c7 100755
--- a/resources/extruders/deltacomb_extruder_0.def.json
+++ b/resources/extruders/deltacomb_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "deltacomb_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/deltacomb_extruder_1.def.json b/resources/extruders/deltacomb_extruder_1.def.json
index 1657688482..b1f30f4624 100755
--- a/resources/extruders/deltacomb_extruder_1.def.json
+++ b/resources/extruders/deltacomb_extruder_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "deltacomb_extruder_1",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/easyarts_ares_extruder_0.def.json b/resources/extruders/easyarts_ares_extruder_0.def.json
index ec7ba81c57..4ddd476dbb 100644
--- a/resources/extruders/easyarts_ares_extruder_0.def.json
+++ b/resources/extruders/easyarts_ares_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "easyarts_ares_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/erzay3d_extruder_0.def.json b/resources/extruders/erzay3d_extruder_0.def.json
index 65bf515263..a9cea62897 100644
--- a/resources/extruders/erzay3d_extruder_0.def.json
+++ b/resources/extruders/erzay3d_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "erzay3d_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/fabtotum_extruder_0.def.json b/resources/extruders/fabtotum_extruder_0.def.json
index 5ed4da6256..a763fbcc15 100644
--- a/resources/extruders/fabtotum_extruder_0.def.json
+++ b/resources/extruders/fabtotum_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "fabtotum_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/felixpro2_dual_extruder_0.def.json b/resources/extruders/felixpro2_dual_extruder_0.def.json
index 90c41a83b5..4278a532f9 100644
--- a/resources/extruders/felixpro2_dual_extruder_0.def.json
+++ b/resources/extruders/felixpro2_dual_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "felixpro2_dual_extruder_0",
"version": 2,
"name": "Left Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/felixpro2_dual_extruder_1.def.json b/resources/extruders/felixpro2_dual_extruder_1.def.json
index 3ff0d401fd..195aad474d 100644
--- a/resources/extruders/felixpro2_dual_extruder_1.def.json
+++ b/resources/extruders/felixpro2_dual_extruder_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "felixpro2_dual_extruder_1",
"version": 2,
"name": "Right Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/felixtec4_dual_extruder_0.def.json b/resources/extruders/felixtec4_dual_extruder_0.def.json
index 2a2d0468e1..1821b0e601 100644
--- a/resources/extruders/felixtec4_dual_extruder_0.def.json
+++ b/resources/extruders/felixtec4_dual_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "felixtec4_dual_extruder_0",
"version": 2,
"name": "Left Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/felixtec4_dual_extruder_1.def.json b/resources/extruders/felixtec4_dual_extruder_1.def.json
index 5d7e9c74a3..37a99c5fb4 100644
--- a/resources/extruders/felixtec4_dual_extruder_1.def.json
+++ b/resources/extruders/felixtec4_dual_extruder_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "felixtec4_dual_extruder_1",
"version": 2,
"name": "Right Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/flsun_qq_extruder.def.json b/resources/extruders/flsun_qq_extruder.def.json
index 7c93776836..c7ca0ed6eb 100644
--- a/resources/extruders/flsun_qq_extruder.def.json
+++ b/resources/extruders/flsun_qq_extruder.def.json
@@ -1,5 +1,4 @@
{
- "id": "flsun_qq_extruder",
"version": 2,
"name": "Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/flsun_qq_s_extruder_0.def.json b/resources/extruders/flsun_qq_s_extruder_0.def.json
index cba424e182..e61056fcd3 100644
--- a/resources/extruders/flsun_qq_s_extruder_0.def.json
+++ b/resources/extruders/flsun_qq_s_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "flsun_qq_s_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/folgertech_FT-5_extruder_0.def.json b/resources/extruders/folgertech_FT-5_extruder_0.def.json
index 8ba9d130c6..861b0e7a7e 100644
--- a/resources/extruders/folgertech_FT-5_extruder_0.def.json
+++ b/resources/extruders/folgertech_FT-5_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "folgertech_FT-5_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/geeetech_a30_extruder_0.def.json b/resources/extruders/geeetech_a30_extruder_0.def.json
index bc1d6a6ed6..90cb496877 100644
--- a/resources/extruders/geeetech_a30_extruder_0.def.json
+++ b/resources/extruders/geeetech_a30_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "geeetech_a30_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/gmax15plus_dual_extruder_0.def.json b/resources/extruders/gmax15plus_dual_extruder_0.def.json
index d3146a0576..45f35dee1f 100644
--- a/resources/extruders/gmax15plus_dual_extruder_0.def.json
+++ b/resources/extruders/gmax15plus_dual_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "gmax15plus_dual_extruder_0",
"version": 2,
"name": "Left Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/gmax15plus_dual_extruder_1.def.json b/resources/extruders/gmax15plus_dual_extruder_1.def.json
index 7b7354d794..6d0d5db06f 100644
--- a/resources/extruders/gmax15plus_dual_extruder_1.def.json
+++ b/resources/extruders/gmax15plus_dual_extruder_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "gmax15plus_dual_extruder_1",
"version": 2,
"name": "Right Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/gmax15plus_extruder_0.def.json b/resources/extruders/gmax15plus_extruder_0.def.json
index 70389745b3..5b0889d46d 100644
--- a/resources/extruders/gmax15plus_extruder_0.def.json
+++ b/resources/extruders/gmax15plus_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "gmax15plus_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/grr_neo_extruder_0.def.json b/resources/extruders/grr_neo_extruder_0.def.json
index 6d76c90796..a9f1fa4faa 100644
--- a/resources/extruders/grr_neo_extruder_0.def.json
+++ b/resources/extruders/grr_neo_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "grr_neo_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/hBp_extruder_left.def.json b/resources/extruders/hBp_extruder_left.def.json
index 7e71ca27a8..ce23f27c29 100644
--- a/resources/extruders/hBp_extruder_left.def.json
+++ b/resources/extruders/hBp_extruder_left.def.json
@@ -1,5 +1,4 @@
{
- "id": "hBp_extruder_left",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/hBp_extruder_right.def.json b/resources/extruders/hBp_extruder_right.def.json
index acd2312268..170556a1fd 100644
--- a/resources/extruders/hBp_extruder_right.def.json
+++ b/resources/extruders/hBp_extruder_right.def.json
@@ -1,5 +1,4 @@
{
- "id": "hBp_extruder_right",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
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/hms434_tool_1.def.json b/resources/extruders/hms434_tool_1.def.json
index c1e20140f3..3a1619d98b 100644
--- a/resources/extruders/hms434_tool_1.def.json
+++ b/resources/extruders/hms434_tool_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "hms434_tool_1",
"version": 2,
"name": "Tool 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/hms434_tool_2.def.json b/resources/extruders/hms434_tool_2.def.json
index a2015006dc..3a174f82b9 100644
--- a/resources/extruders/hms434_tool_2.def.json
+++ b/resources/extruders/hms434_tool_2.def.json
@@ -1,5 +1,4 @@
{
- "id": "hms434_tool_2",
"version": 2,
"name": "Tool 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/hms434_tool_3.def.json b/resources/extruders/hms434_tool_3.def.json
index b0199d5523..e1e237d332 100644
--- a/resources/extruders/hms434_tool_3.def.json
+++ b/resources/extruders/hms434_tool_3.def.json
@@ -1,5 +1,4 @@
{
- "id": "hms434_tool_3",
"version": 2,
"name": "Tool 3",
"inherits": "fdmextruder",
diff --git a/resources/extruders/hms434_tool_4.def.json b/resources/extruders/hms434_tool_4.def.json
index 9346dafd67..1a68d5aff5 100644
--- a/resources/extruders/hms434_tool_4.def.json
+++ b/resources/extruders/hms434_tool_4.def.json
@@ -1,5 +1,4 @@
{
- "id": "hms434_tool_4",
"version": 2,
"name": "Tool 4",
"inherits": "fdmextruder",
diff --git a/resources/extruders/hms434_tool_5.def.json b/resources/extruders/hms434_tool_5.def.json
index 051227fb1b..b56e8be84e 100644
--- a/resources/extruders/hms434_tool_5.def.json
+++ b/resources/extruders/hms434_tool_5.def.json
@@ -1,5 +1,4 @@
{
- "id": "hms434_tool_5",
"version": 2,
"name": "Tool 5",
"inherits": "fdmextruder",
diff --git a/resources/extruders/hms434_tool_6.def.json b/resources/extruders/hms434_tool_6.def.json
index 056bb66741..b8c8cdf062 100644
--- a/resources/extruders/hms434_tool_6.def.json
+++ b/resources/extruders/hms434_tool_6.def.json
@@ -1,5 +1,4 @@
{
- "id": "hms434_tool_6",
"version": 2,
"name": "Tool 6",
"inherits": "fdmextruder",
diff --git a/resources/extruders/hms434_tool_7.def.json b/resources/extruders/hms434_tool_7.def.json
index ff8f938e1c..3fc04078fa 100644
--- a/resources/extruders/hms434_tool_7.def.json
+++ b/resources/extruders/hms434_tool_7.def.json
@@ -1,5 +1,4 @@
{
- "id": "hms434_tool_7",
"version": 2,
"name": "Tool 7",
"inherits": "fdmextruder",
diff --git a/resources/extruders/hms434_tool_8.def.json b/resources/extruders/hms434_tool_8.def.json
index 2e9302e26c..faa6f36871 100644
--- a/resources/extruders/hms434_tool_8.def.json
+++ b/resources/extruders/hms434_tool_8.def.json
@@ -1,5 +1,4 @@
{
- "id": "hms434_tool_8",
"version": 2,
"name": "Tool 8",
"inherits": "fdmextruder",
diff --git a/resources/extruders/imade3d_jellybox_2_extruder_0.def.json b/resources/extruders/imade3d_jellybox_2_extruder_0.def.json
index 1d50297343..ca25b62286 100644
--- a/resources/extruders/imade3d_jellybox_2_extruder_0.def.json
+++ b/resources/extruders/imade3d_jellybox_2_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "imade3d_jellybox_2_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/imade3d_jellybox_extruder_0.def.json b/resources/extruders/imade3d_jellybox_extruder_0.def.json
index feaa717ee6..69c6d87d79 100644
--- a/resources/extruders/imade3d_jellybox_extruder_0.def.json
+++ b/resources/extruders/imade3d_jellybox_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "imade3d_jellybox_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/innovo_inventor_extruder_0.def.json b/resources/extruders/innovo_inventor_extruder_0.def.json
index ed599463f2..8758f3d516 100644
--- a/resources/extruders/innovo_inventor_extruder_0.def.json
+++ b/resources/extruders/innovo_inventor_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "innovo_inventor_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/jgaurora_a1_extruder_0.def.json b/resources/extruders/jgaurora_a1_extruder_0.def.json
index 71742b734a..f67d8d553e 100644
--- a/resources/extruders/jgaurora_a1_extruder_0.def.json
+++ b/resources/extruders/jgaurora_a1_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "jgaurora_a1_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/jgaurora_a3s_extruder_0.def.json b/resources/extruders/jgaurora_a3s_extruder_0.def.json
index 430867b38b..9a42d0da04 100644
--- a/resources/extruders/jgaurora_a3s_extruder_0.def.json
+++ b/resources/extruders/jgaurora_a3s_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "jgaurora_a3s_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/jgaurora_a5_extruder_0.def.json b/resources/extruders/jgaurora_a5_extruder_0.def.json
index fbc6ba77e6..5308c57934 100644
--- a/resources/extruders/jgaurora_a5_extruder_0.def.json
+++ b/resources/extruders/jgaurora_a5_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "jgaurora_a5_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/jgaurora_jgmaker_magic_extruder_0.def.json b/resources/extruders/jgaurora_jgmaker_magic_extruder_0.def.json
index 41593a4821..58beaa4cc8 100644
--- a/resources/extruders/jgaurora_jgmaker_magic_extruder_0.def.json
+++ b/resources/extruders/jgaurora_jgmaker_magic_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "jgaurora_jgmaker_magic_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/jgaurora_z_603s_extruder_0.def.json b/resources/extruders/jgaurora_z_603s_extruder_0.def.json
index 987425b28a..647016d5ff 100644
--- a/resources/extruders/jgaurora_z_603s_extruder_0.def.json
+++ b/resources/extruders/jgaurora_z_603s_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "jgaurora_z_603s_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/julia_extruder_0.def.json b/resources/extruders/julia_extruder_0.def.json
index 53a569ccd8..ef0ca83ac4 100644
--- a/resources/extruders/julia_extruder_0.def.json
+++ b/resources/extruders/julia_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "julia_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/kemiq_q2_beta_extruder_0.def.json b/resources/extruders/kemiq_q2_beta_extruder_0.def.json
index 0c7d1b7b50..79d55223f3 100644
--- a/resources/extruders/kemiq_q2_beta_extruder_0.def.json
+++ b/resources/extruders/kemiq_q2_beta_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "kemiq_q2_beta_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/kemiq_q2_gama_extruder_0.def.json b/resources/extruders/kemiq_q2_gama_extruder_0.def.json
index bb165ca35e..ad6e6372ee 100644
--- a/resources/extruders/kemiq_q2_gama_extruder_0.def.json
+++ b/resources/extruders/kemiq_q2_gama_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "kemiq_q2_gama_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/key3d_tyro_extruder_0.def.json b/resources/extruders/key3d_tyro_extruder_0.def.json
new file mode 100644
index 0000000000..f08ae351ab
--- /dev/null
+++ b/resources/extruders/key3d_tyro_extruder_0.def.json
@@ -0,0 +1,15 @@
+{
+ "version": 2,
+ "name": "0.4mm Nozzle",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "key3d_tyro",
+ "position": "0"
+ },
+
+ "overrides": {
+ "extruder_nr": { "default_value": 0 },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
diff --git a/resources/extruders/kossel_mini_extruder_0.def.json b/resources/extruders/kossel_mini_extruder_0.def.json
index f57154e1a3..7da2cff3b1 100644
--- a/resources/extruders/kossel_mini_extruder_0.def.json
+++ b/resources/extruders/kossel_mini_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "kossel_mini_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/kossel_pro_extruder_0.def.json b/resources/extruders/kossel_pro_extruder_0.def.json
index 921e1d8bb4..48c1180f84 100644
--- a/resources/extruders/kossel_pro_extruder_0.def.json
+++ b/resources/extruders/kossel_pro_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "kossel_pro_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/kupido_extruder_0.def.json b/resources/extruders/kupido_extruder_0.def.json
index ef988d4fde..784e453bd1 100644
--- a/resources/extruders/kupido_extruder_0.def.json
+++ b/resources/extruders/kupido_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "kupido_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/leapfrog_bolt_pro_extruder_left.def.json b/resources/extruders/leapfrog_bolt_pro_extruder_left.def.json
new file mode 100644
index 0000000000..4ec859a60c
--- /dev/null
+++ b/resources/extruders/leapfrog_bolt_pro_extruder_left.def.json
@@ -0,0 +1,21 @@
+{
+ "version": 2,
+ "name": "Left extruder",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "leapfrog_bolt_pro",
+ "position": "1"
+ },
+ "overrides": {
+ "extruder_nr": {
+ "default_value": 1,
+ "maximum_value": "1"
+ },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "material_diameter": { "default_value": 1.75 },
+ "machine_nozzle_head_distance": { "default_value": 22 },
+ "machine_nozzle_offset_x": { "default_value": 0 },
+ "machine_nozzle_offset_y": { "default_value": 0.0 },
+ "machine_extruder_start_code": { "default_value": "G1 Y-32 F12000\nG1 X6 F1000\nG1 X-32 F4000\nG1 X6" }
+ }
+}
diff --git a/resources/extruders/leapfrog_bolt_pro_extruder_right.def.json b/resources/extruders/leapfrog_bolt_pro_extruder_right.def.json
new file mode 100644
index 0000000000..fe27106afd
--- /dev/null
+++ b/resources/extruders/leapfrog_bolt_pro_extruder_right.def.json
@@ -0,0 +1,21 @@
+{
+ "version": 2,
+ "name": "Right extruder",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "leapfrog_bolt_pro",
+ "position": "0"
+ },
+ "overrides": {
+ "extruder_nr": {
+ "default_value": 0,
+ "maximum_value": "1"
+ },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "material_diameter": { "default_value": 1.75 },
+ "machine_nozzle_head_distance": { "default_value": 22 },
+ "machine_nozzle_offset_x": { "default_value": 0 },
+ "machine_nozzle_offset_y": { "default_value": 0.0 },
+ "machine_extruder_start_code": { "default_value": "G1 Y-32 F12000\nG1 X296 F1000\nG1 X334 F4000\nG1 X296"}
+ }
+}
diff --git a/resources/extruders/makeR_pegasus_extruder_0.def.json b/resources/extruders/makeR_pegasus_extruder_0.def.json
index e37891abde..c17c51d599 100644
--- a/resources/extruders/makeR_pegasus_extruder_0.def.json
+++ b/resources/extruders/makeR_pegasus_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "makeR_pegasus_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/makeR_prusa_tairona_i3_extruder_0.def.json b/resources/extruders/makeR_prusa_tairona_i3_extruder_0.def.json
index a80d4079cb..278981f355 100644
--- a/resources/extruders/makeR_prusa_tairona_i3_extruder_0.def.json
+++ b/resources/extruders/makeR_prusa_tairona_i3_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "makeR_prusa_tairona_i3_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/makeblock_mcreate_extruder_0.def.json b/resources/extruders/makeblock_mcreate_extruder_0.def.json
new file mode 100644
index 0000000000..060ea634f8
--- /dev/null
+++ b/resources/extruders/makeblock_mcreate_extruder_0.def.json
@@ -0,0 +1,20 @@
+{
+ "version": 2,
+ "name": "Extruder 1",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "makeblock_mcreate",
+ "position": "0"
+ },
+ "overrides": {
+ "extruder_nr": {
+ "default_value": 0
+ },
+ "machine_nozzle_size": {
+ "default_value": 0.4
+ },
+ "material_diameter": {
+ "default_value": 1.75
+ }
+ }
+}
diff --git a/resources/extruders/makeit_dual_1st.def.json b/resources/extruders/makeit_dual_1st.def.json
index 0f5a716e16..16374b40d1 100644
--- a/resources/extruders/makeit_dual_1st.def.json
+++ b/resources/extruders/makeit_dual_1st.def.json
@@ -1,5 +1,4 @@
{
- "id": "makeit_dual_1st",
"version": 2,
"name": "1st Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/makeit_dual_2nd.def.json b/resources/extruders/makeit_dual_2nd.def.json
index f93d670c85..562cfcbc40 100644
--- a/resources/extruders/makeit_dual_2nd.def.json
+++ b/resources/extruders/makeit_dual_2nd.def.json
@@ -1,5 +1,4 @@
{
- "id": "makeit_dual_2nd",
"version": 2,
"name": "2nd Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/makeit_l_dual_1st.def.json b/resources/extruders/makeit_l_dual_1st.def.json
index 6a9e8e3fc1..8fbc2944b1 100644
--- a/resources/extruders/makeit_l_dual_1st.def.json
+++ b/resources/extruders/makeit_l_dual_1st.def.json
@@ -1,5 +1,4 @@
{
- "id": "makeit_l_dual_1st",
"version": 2,
"name": "1st Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/makeit_l_dual_2nd.def.json b/resources/extruders/makeit_l_dual_2nd.def.json
index 72b86b22e4..e163e9565a 100644
--- a/resources/extruders/makeit_l_dual_2nd.def.json
+++ b/resources/extruders/makeit_l_dual_2nd.def.json
@@ -1,5 +1,4 @@
{
- "id": "makeit_l_dual_2nd",
"version": 2,
"name": "2nd Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/maker_starter_extruder_0.def.json b/resources/extruders/maker_starter_extruder_0.def.json
index ee94250248..76e2f74a4c 100644
--- a/resources/extruders/maker_starter_extruder_0.def.json
+++ b/resources/extruders/maker_starter_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "maker_starter_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/makerbotreplicator_extruder_0.def.json b/resources/extruders/makerbotreplicator_extruder_0.def.json
index 36a975ace1..595134d788 100644
--- a/resources/extruders/makerbotreplicator_extruder_0.def.json
+++ b/resources/extruders/makerbotreplicator_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "makerbotreplicator_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/malyan_m180_extruder_0.def.json b/resources/extruders/malyan_m180_extruder_0.def.json
index bdf5350b26..04bc70ce55 100644
--- a/resources/extruders/malyan_m180_extruder_0.def.json
+++ b/resources/extruders/malyan_m180_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "malyan_m180_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/malyan_m200_extruder_0.def.json b/resources/extruders/malyan_m200_extruder_0.def.json
index 4a135aa72d..88d99fb426 100644
--- a/resources/extruders/malyan_m200_extruder_0.def.json
+++ b/resources/extruders/malyan_m200_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "malyan_m200_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/mankati_fullscale_xt_plus_extruder_0.def.json b/resources/extruders/mankati_fullscale_xt_plus_extruder_0.def.json
index 032a577022..4cb893336e 100644
--- a/resources/extruders/mankati_fullscale_xt_plus_extruder_0.def.json
+++ b/resources/extruders/mankati_fullscale_xt_plus_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "mankati_fullscale_xt_plus_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/mendel90_extruder_0.def.json b/resources/extruders/mendel90_extruder_0.def.json
index 3ee2fd2b10..2ea4d9a7de 100644
--- a/resources/extruders/mendel90_extruder_0.def.json
+++ b/resources/extruders/mendel90_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "mendel90_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/monoprice_select_mini_v1_extruder_0.def.json b/resources/extruders/monoprice_select_mini_v1_extruder_0.def.json
index e4a899d7af..023bd6b27c 100644
--- a/resources/extruders/monoprice_select_mini_v1_extruder_0.def.json
+++ b/resources/extruders/monoprice_select_mini_v1_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "monoprice_select_mini_v1_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/monoprice_select_mini_v2_extruder_0.def.json b/resources/extruders/monoprice_select_mini_v2_extruder_0.def.json
index b727cfce1f..79ba110701 100644
--- a/resources/extruders/monoprice_select_mini_v2_extruder_0.def.json
+++ b/resources/extruders/monoprice_select_mini_v2_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "monoprice_select_mini_v2_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/nwa3d_a31_extruder_0.def.json b/resources/extruders/nwa3d_a31_extruder_0.def.json
index 999fe37d28..de1938956a 100644
--- a/resources/extruders/nwa3d_a31_extruder_0.def.json
+++ b/resources/extruders/nwa3d_a31_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "nwa3d_a31_extruder_0",
"version": 2,
"name": "Standard 0.4mm",
"inherits": "fdmextruder",
diff --git a/resources/extruders/nwa3d_a5_extruder_0.def.json b/resources/extruders/nwa3d_a5_extruder_0.def.json
index 5c3cc6a127..9131480732 100644
--- a/resources/extruders/nwa3d_a5_extruder_0.def.json
+++ b/resources/extruders/nwa3d_a5_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "nwa3d_a5_extruder_0",
"version": 2,
"name": "Regular 0.4mm Nozzle",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ord_extruder_0.def.json b/resources/extruders/ord_extruder_0.def.json
index 317ad70a3c..61317c4a17 100644
--- a/resources/extruders/ord_extruder_0.def.json
+++ b/resources/extruders/ord_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "ord_extruder_0",
"version": 2,
"name": "0",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ord_extruder_1.def.json b/resources/extruders/ord_extruder_1.def.json
index 6e29ad2f2b..43bc11fa71 100644
--- a/resources/extruders/ord_extruder_1.def.json
+++ b/resources/extruders/ord_extruder_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "ord_extruder_1",
"version": 2,
"name": "1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ord_extruder_2.def.json b/resources/extruders/ord_extruder_2.def.json
index 849930c988..84bcbd5332 100644
--- a/resources/extruders/ord_extruder_2.def.json
+++ b/resources/extruders/ord_extruder_2.def.json
@@ -1,5 +1,4 @@
{
- "id": "ord_extruder_2",
"version": 2,
"name": "2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ord_extruder_3.def.json b/resources/extruders/ord_extruder_3.def.json
index eb3676c14f..db81f82b78 100644
--- a/resources/extruders/ord_extruder_3.def.json
+++ b/resources/extruders/ord_extruder_3.def.json
@@ -1,5 +1,4 @@
{
- "id": "ord_extruder_3",
"version": 2,
"name": "3",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ord_extruder_4.def.json b/resources/extruders/ord_extruder_4.def.json
index 291e9e5501..2ca7609e06 100644
--- a/resources/extruders/ord_extruder_4.def.json
+++ b/resources/extruders/ord_extruder_4.def.json
@@ -1,5 +1,4 @@
{
- "id": "ord_extruder_4",
"version": 2,
"name": "4",
"inherits": "fdmextruder",
diff --git a/resources/extruders/peopoly_moai_extruder_0.def.json b/resources/extruders/peopoly_moai_extruder_0.def.json
index bbffd4ac4d..1acf5b499f 100644
--- a/resources/extruders/peopoly_moai_extruder_0.def.json
+++ b/resources/extruders/peopoly_moai_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "peopoly_moai_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/printrbot_play_extruder_0.def.json b/resources/extruders/printrbot_play_extruder_0.def.json
index ef1284758b..682810c8d8 100644
--- a/resources/extruders/printrbot_play_extruder_0.def.json
+++ b/resources/extruders/printrbot_play_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "printrbot_play_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/printrbot_play_heated_extruder_0.def.json b/resources/extruders/printrbot_play_heated_extruder_0.def.json
index 0a3eeb3d06..72335e82d6 100644
--- a/resources/extruders/printrbot_play_heated_extruder_0.def.json
+++ b/resources/extruders/printrbot_play_heated_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "printrbot_play_heated_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/printrbot_simple_extended_extruder_0.def.json b/resources/extruders/printrbot_simple_extended_extruder_0.def.json
index 71c8863552..b50a142d2e 100644
--- a/resources/extruders/printrbot_simple_extended_extruder_0.def.json
+++ b/resources/extruders/printrbot_simple_extended_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "printrbot_simple_extended_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/printrbot_simple_extruder_0.def.json b/resources/extruders/printrbot_simple_extruder_0.def.json
index e97977e07e..4fa5d7fbf2 100644
--- a/resources/extruders/printrbot_simple_extruder_0.def.json
+++ b/resources/extruders/printrbot_simple_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "printrbot_simple_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/printrbot_simple_makers_kit_extruder_0.def.json b/resources/extruders/printrbot_simple_makers_kit_extruder_0.def.json
index f002bb9cf5..a58195fdfb 100644
--- a/resources/extruders/printrbot_simple_makers_kit_extruder_0.def.json
+++ b/resources/extruders/printrbot_simple_makers_kit_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "printrbot_simple_makers_kit_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/prusa_i3_extruder_0.def.json b/resources/extruders/prusa_i3_extruder_0.def.json
index 11c52e062b..dbb01032b8 100644
--- a/resources/extruders/prusa_i3_extruder_0.def.json
+++ b/resources/extruders/prusa_i3_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "prusa_i3_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/prusa_i3_mk2_extruder_0.def.json b/resources/extruders/prusa_i3_mk2_extruder_0.def.json
index a56aae4300..e802687062 100644
--- a/resources/extruders/prusa_i3_mk2_extruder_0.def.json
+++ b/resources/extruders/prusa_i3_mk2_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "prusa_i3_mk2_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/prusa_i3_mk3_extruder_0.def.json b/resources/extruders/prusa_i3_mk3_extruder_0.def.json
new file mode 100644
index 0000000000..29156f0d70
--- /dev/null
+++ b/resources/extruders/prusa_i3_mk3_extruder_0.def.json
@@ -0,0 +1,15 @@
+{
+ "version": 2,
+ "name": "Extruder 1",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "prusa_i3_mk3",
+ "position": "0"
+ },
+
+ "overrides": {
+ "extruder_nr": { "default_value": 0 },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
\ No newline at end of file
diff --git a/resources/extruders/prusa_i3_xl_extruder_0.def.json b/resources/extruders/prusa_i3_xl_extruder_0.def.json
index 5dc2ab3bc0..c4125b36ee 100644
--- a/resources/extruders/prusa_i3_xl_extruder_0.def.json
+++ b/resources/extruders/prusa_i3_xl_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "prusa_i3_xl_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/punchtec_connect_xl_extruder_0.def.json b/resources/extruders/punchtec_connect_xl_extruder_0.def.json
index 68c3d8c906..f286140167 100644
--- a/resources/extruders/punchtec_connect_xl_extruder_0.def.json
+++ b/resources/extruders/punchtec_connect_xl_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "punchtec_connect_xl_extruder_0",
"version": 2,
"name": "0",
"inherits": "fdmextruder",
diff --git a/resources/extruders/punchtec_connect_xl_extruder_1.def.json b/resources/extruders/punchtec_connect_xl_extruder_1.def.json
index a2e4b31714..47d28882cf 100644
--- a/resources/extruders/punchtec_connect_xl_extruder_1.def.json
+++ b/resources/extruders/punchtec_connect_xl_extruder_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "punchtec_connect_xl_extruder_1",
"version": 2,
"name": "1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/raise3D_N2_dual_extruder_0.def.json b/resources/extruders/raise3D_N2_dual_extruder_0.def.json
index 48746969d3..9294a73933 100644
--- a/resources/extruders/raise3D_N2_dual_extruder_0.def.json
+++ b/resources/extruders/raise3D_N2_dual_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "raise3D_N2_dual_extruder_0",
"version": 2,
"name": "Left Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/raise3D_N2_dual_extruder_1.def.json b/resources/extruders/raise3D_N2_dual_extruder_1.def.json
index 8ea6f95b16..e09cb6b9fc 100644
--- a/resources/extruders/raise3D_N2_dual_extruder_1.def.json
+++ b/resources/extruders/raise3D_N2_dual_extruder_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "raise3D_N2_dual_extruder_1",
"version": 2,
"name": "Right Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/raise3D_N2_plus_dual_extruder_0.def.json b/resources/extruders/raise3D_N2_plus_dual_extruder_0.def.json
index fc7531cf1b..d8821204f0 100644
--- a/resources/extruders/raise3D_N2_plus_dual_extruder_0.def.json
+++ b/resources/extruders/raise3D_N2_plus_dual_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "raise3D_N2_plus_dual_extruder_0",
"version": 2,
"name": "Left Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/raise3D_N2_plus_dual_extruder_1.def.json b/resources/extruders/raise3D_N2_plus_dual_extruder_1.def.json
index 83f949bb22..0a6ded63a3 100644
--- a/resources/extruders/raise3D_N2_plus_dual_extruder_1.def.json
+++ b/resources/extruders/raise3D_N2_plus_dual_extruder_1.def.json
@@ -1,5 +1,4 @@
{
- "id": "raise3D_N2_plus_dual_extruder_1",
"version": 2,
"name": "Right Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/raise3D_N2_single_extruder_0.def.json b/resources/extruders/raise3D_N2_single_extruder_0.def.json
index 08fedff99c..399d577110 100644
--- a/resources/extruders/raise3D_N2_single_extruder_0.def.json
+++ b/resources/extruders/raise3D_N2_single_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "raise3D_N2_single_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/renkforce_rf100_extruder_0.def.json b/resources/extruders/renkforce_rf100_extruder_0.def.json
index 6a7f883309..ff64e2f86a 100644
--- a/resources/extruders/renkforce_rf100_extruder_0.def.json
+++ b/resources/extruders/renkforce_rf100_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "renkforce_rf100_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/rigid3d_3rdgen_extruder_0.def.json b/resources/extruders/rigid3d_3rdgen_extruder_0.def.json
index e309086a72..edc87f695e 100644
--- a/resources/extruders/rigid3d_3rdgen_extruder_0.def.json
+++ b/resources/extruders/rigid3d_3rdgen_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "rigid3d_3rdgen_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/rigid3d_extruder_0.def.json b/resources/extruders/rigid3d_extruder_0.def.json
index e34987cd6e..eaac6b16a0 100644
--- a/resources/extruders/rigid3d_extruder_0.def.json
+++ b/resources/extruders/rigid3d_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "rigid3d_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/rigid3d_hobby_extruder_0.def.json b/resources/extruders/rigid3d_hobby_extruder_0.def.json
index 681aeecb43..68dd523af3 100644
--- a/resources/extruders/rigid3d_hobby_extruder_0.def.json
+++ b/resources/extruders/rigid3d_hobby_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "rigid3d_hobby_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/rigid3d_mucit_extruder_0.def.json b/resources/extruders/rigid3d_mucit_extruder_0.def.json
index af3f54e150..de72db7a33 100644
--- a/resources/extruders/rigid3d_mucit_extruder_0.def.json
+++ b/resources/extruders/rigid3d_mucit_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "rigid3d_mucit_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/rigid3d_zero2_extruder_0.def.json b/resources/extruders/rigid3d_zero2_extruder_0.def.json
index 30d1dbb3c4..051ce2384d 100644
--- a/resources/extruders/rigid3d_zero2_extruder_0.def.json
+++ b/resources/extruders/rigid3d_zero2_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "rigid3d_zero2_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/rigid3d_zero_extruder_0.def.json b/resources/extruders/rigid3d_zero_extruder_0.def.json
index 6c5ae10ddb..76a8fceaae 100644
--- a/resources/extruders/rigid3d_zero_extruder_0.def.json
+++ b/resources/extruders/rigid3d_zero_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "rigid3d_zero_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/rigidbot_big_extruder_0.def.json b/resources/extruders/rigidbot_big_extruder_0.def.json
index 2b07adaaaa..9ef72d5203 100644
--- a/resources/extruders/rigidbot_big_extruder_0.def.json
+++ b/resources/extruders/rigidbot_big_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "rigidbot_big_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/rigidbot_extruder_0.def.json b/resources/extruders/rigidbot_extruder_0.def.json
index 32ce3fc1c3..9155be0ff1 100644
--- a/resources/extruders/rigidbot_extruder_0.def.json
+++ b/resources/extruders/rigidbot_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "rigidbot_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/robo_3d_r1_extruder_0.def.json b/resources/extruders/robo_3d_r1_extruder_0.def.json
index 0872e91a11..60811842ac 100644
--- a/resources/extruders/robo_3d_r1_extruder_0.def.json
+++ b/resources/extruders/robo_3d_r1_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "robo_3d_r1_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/seemecnc_artemis_extruder_0.def.json b/resources/extruders/seemecnc_artemis_extruder_0.def.json
index a709a80cbf..a86e5eb2bd 100644
--- a/resources/extruders/seemecnc_artemis_extruder_0.def.json
+++ b/resources/extruders/seemecnc_artemis_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "seemecnc_artemis_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/seemecnc_v32_extruder_0.def.json b/resources/extruders/seemecnc_v32_extruder_0.def.json
index 5bd489e537..b223116be3 100644
--- a/resources/extruders/seemecnc_v32_extruder_0.def.json
+++ b/resources/extruders/seemecnc_v32_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "seemecnc_v32_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/skriware_2_extruder_0.def.json b/resources/extruders/skriware_2_extruder_0.def.json
new file mode 100644
index 0000000000..0569600094
--- /dev/null
+++ b/resources/extruders/skriware_2_extruder_0.def.json
@@ -0,0 +1,18 @@
+{
+ "version": 2,
+ "name": "Left Extruder",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "skriware_2",
+ "position": "0"
+ },
+
+ "overrides": {
+ "extruder_nr": {
+ "default_value": 0,
+ "maximum_value": "1"
+ },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
diff --git a/resources/extruders/skriware_2_extruder_1.def.json b/resources/extruders/skriware_2_extruder_1.def.json
new file mode 100644
index 0000000000..d6fa76e1a0
--- /dev/null
+++ b/resources/extruders/skriware_2_extruder_1.def.json
@@ -0,0 +1,18 @@
+{
+ "version": 2,
+ "name": "Right Extruder",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "skriware_2",
+ "position": "1"
+ },
+
+ "overrides": {
+ "extruder_nr": {
+ "default_value": 1,
+ "maximum_value": "1"
+ },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
diff --git a/resources/extruders/stereotech_start_extruder_0.def.json b/resources/extruders/stereotech_start_extruder_0.def.json
index 8658944ebd..b0a1e91d1c 100644
--- a/resources/extruders/stereotech_start_extruder_0.def.json
+++ b/resources/extruders/stereotech_start_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "stereotech_start_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/stereotech_ste320_1st.def.json b/resources/extruders/stereotech_ste320_1st.def.json
index ffbf5bde2f..8110775d33 100644
--- a/resources/extruders/stereotech_ste320_1st.def.json
+++ b/resources/extruders/stereotech_ste320_1st.def.json
@@ -1,5 +1,4 @@
{
- "id": "stereotech_ste320_1st",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/stereotech_ste320_2nd.def.json b/resources/extruders/stereotech_ste320_2nd.def.json
index ae1b8f0f15..12a1479164 100644
--- a/resources/extruders/stereotech_ste320_2nd.def.json
+++ b/resources/extruders/stereotech_ste320_2nd.def.json
@@ -1,5 +1,4 @@
{
- "id": "stereotech_ste320_2nd",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/strateo3d_left_extruder.def.json b/resources/extruders/strateo3d_left_extruder.def.json
index 1df8eb0ebb..096b265030 100644
--- a/resources/extruders/strateo3d_left_extruder.def.json
+++ b/resources/extruders/strateo3d_left_extruder.def.json
@@ -1,5 +1,4 @@
{
- "id": "strateo3d_left_extruder",
"version": 2,
"name": "Left Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/strateo3d_right_extruder.def.json b/resources/extruders/strateo3d_right_extruder.def.json
index ea59870329..24acdef8b5 100644
--- a/resources/extruders/strateo3d_right_extruder.def.json
+++ b/resources/extruders/strateo3d_right_extruder.def.json
@@ -1,5 +1,4 @@
{
- "id": "strateo3d_right_extruder",
"version": 2,
"name": "Right Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/structur3d_discov3ry1_complete_um2plus_extruder_0.def.json b/resources/extruders/structur3d_discov3ry1_complete_um2plus_extruder_0.def.json
index 8436dc0a94..c63f740f11 100644
--- a/resources/extruders/structur3d_discov3ry1_complete_um2plus_extruder_0.def.json
+++ b/resources/extruders/structur3d_discov3ry1_complete_um2plus_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "structur3d_discov3ry1_complete_um2plus_extruder_0",
"version": 2,
"name": "Discov3ry Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/tam_extruder_0.def.json b/resources/extruders/tam_extruder_0.def.json
index fc53efad3f..f487a6ff90 100644
--- a/resources/extruders/tam_extruder_0.def.json
+++ b/resources/extruders/tam_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "tam_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/tevo_blackwidow_extruder_0.def.json b/resources/extruders/tevo_blackwidow_extruder_0.def.json
index 125cf19c98..3450b36ac6 100644
--- a/resources/extruders/tevo_blackwidow_extruder_0.def.json
+++ b/resources/extruders/tevo_blackwidow_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "tevo_blackwidow_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/tevo_tarantula_extruder_0.def.json b/resources/extruders/tevo_tarantula_extruder_0.def.json
index bc43986814..a2ac48c06d 100644
--- a/resources/extruders/tevo_tarantula_extruder_0.def.json
+++ b/resources/extruders/tevo_tarantula_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "tevo_tarantula_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/tevo_tornado_extruder_0.def.json b/resources/extruders/tevo_tornado_extruder_0.def.json
index b47a757113..6c0c9f39b1 100644
--- a/resources/extruders/tevo_tornado_extruder_0.def.json
+++ b/resources/extruders/tevo_tornado_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "tevo_tornado_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/tizyx_evy_dual_extruder_0.def.JSON b/resources/extruders/tizyx_evy_dual_extruder_0.def.JSON
index 59e9311e50..282d9d2651 100644
--- a/resources/extruders/tizyx_evy_dual_extruder_0.def.JSON
+++ b/resources/extruders/tizyx_evy_dual_extruder_0.def.JSON
@@ -1,5 +1,4 @@
{
- "id": "tizyx_evy_dual_extruder_0",
"version": 2,
"name": "Classic Extruder",
"inherits": "fdmextruder",
diff --git a/resources/extruders/tizyx_evy_dual_extruder_1.def.JSON b/resources/extruders/tizyx_evy_dual_extruder_1.def.JSON
index cf5dc76caa..69e4a60952 100644
--- a/resources/extruders/tizyx_evy_dual_extruder_1.def.JSON
+++ b/resources/extruders/tizyx_evy_dual_extruder_1.def.JSON
@@ -1,5 +1,4 @@
{
- "id": "tizyx_evy_dual_extruder_1",
"version": 2,
"name": "Direct Drive",
"inherits": "fdmextruder",
diff --git a/resources/extruders/tizyx_evy_extruder_0.def.JSON b/resources/extruders/tizyx_evy_extruder_0.def.JSON
index bd3c4c9792..4f93648491 100644
--- a/resources/extruders/tizyx_evy_extruder_0.def.JSON
+++ b/resources/extruders/tizyx_evy_extruder_0.def.JSON
@@ -1,5 +1,4 @@
{
- "id": "tizyx_evy_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/tizyx_k25_extruder_0.def.json b/resources/extruders/tizyx_k25_extruder_0.def.json
index 409198d77c..626fedf434 100644
--- a/resources/extruders/tizyx_k25_extruder_0.def.json
+++ b/resources/extruders/tizyx_k25_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "tizyx_k25_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ubuild-3d_mr_bot_280_extruder_0.def.json b/resources/extruders/ubuild-3d_mr_bot_280_extruder_0.def.json
index b04ca0dcbf..749a5ed77d 100644
--- a/resources/extruders/ubuild-3d_mr_bot_280_extruder_0.def.json
+++ b/resources/extruders/ubuild-3d_mr_bot_280_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "ubuild-3d_mr_bot_280_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker2_extended_extruder_0.def.json b/resources/extruders/ultimaker2_extended_extruder_0.def.json
index 6387ec72ed..cc7306a393 100644
--- a/resources/extruders/ultimaker2_extended_extruder_0.def.json
+++ b/resources/extruders/ultimaker2_extended_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker2_extended_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker2_extended_plus_extruder_0.def.json b/resources/extruders/ultimaker2_extended_plus_extruder_0.def.json
index 39fc665ff2..337c120097 100644
--- a/resources/extruders/ultimaker2_extended_plus_extruder_0.def.json
+++ b/resources/extruders/ultimaker2_extended_plus_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker2_extended_plus_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker2_extruder_0.def.json b/resources/extruders/ultimaker2_extruder_0.def.json
index 2daf57c73f..64ac8698f1 100644
--- a/resources/extruders/ultimaker2_extruder_0.def.json
+++ b/resources/extruders/ultimaker2_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker2_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker2_go_extruder_0.def.json b/resources/extruders/ultimaker2_go_extruder_0.def.json
index 4c258e237e..5ddcfbd551 100644
--- a/resources/extruders/ultimaker2_go_extruder_0.def.json
+++ b/resources/extruders/ultimaker2_go_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker2_go_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker2_plus_extruder_0.def.json b/resources/extruders/ultimaker2_plus_extruder_0.def.json
index 13ab0c59ea..abf36c0b08 100644
--- a/resources/extruders/ultimaker2_plus_extruder_0.def.json
+++ b/resources/extruders/ultimaker2_plus_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker2_plus_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker3_extended_extruder_left.def.json b/resources/extruders/ultimaker3_extended_extruder_left.def.json
index 2d81424bc6..fbc49a1f32 100644
--- a/resources/extruders/ultimaker3_extended_extruder_left.def.json
+++ b/resources/extruders/ultimaker3_extended_extruder_left.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker3_extended_extruder_left",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker3_extended_extruder_right.def.json b/resources/extruders/ultimaker3_extended_extruder_right.def.json
index 7cdd5876c1..fbe6bcc878 100644
--- a/resources/extruders/ultimaker3_extended_extruder_right.def.json
+++ b/resources/extruders/ultimaker3_extended_extruder_right.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker3_extended_extruder_right",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker3_extruder_left.def.json b/resources/extruders/ultimaker3_extruder_left.def.json
index 9f5ed34692..b18e2decfa 100644
--- a/resources/extruders/ultimaker3_extruder_left.def.json
+++ b/resources/extruders/ultimaker3_extruder_left.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker3_extruder_left",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker3_extruder_right.def.json b/resources/extruders/ultimaker3_extruder_right.def.json
index 7298a552b7..4753fde489 100644
--- a/resources/extruders/ultimaker3_extruder_right.def.json
+++ b/resources/extruders/ultimaker3_extruder_right.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker3_extruder_right",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker_original_dual_1st.def.json b/resources/extruders/ultimaker_original_dual_1st.def.json
index 3d837fc989..acc8168d94 100644
--- a/resources/extruders/ultimaker_original_dual_1st.def.json
+++ b/resources/extruders/ultimaker_original_dual_1st.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker_original_dual_1st",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker_original_dual_2nd.def.json b/resources/extruders/ultimaker_original_dual_2nd.def.json
index 80cc17c58d..7907571e66 100644
--- a/resources/extruders/ultimaker_original_dual_2nd.def.json
+++ b/resources/extruders/ultimaker_original_dual_2nd.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker_original_dual_2nd",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker_original_extruder_0.def.json b/resources/extruders/ultimaker_original_extruder_0.def.json
index 4aab693212..30df96df58 100644
--- a/resources/extruders/ultimaker_original_extruder_0.def.json
+++ b/resources/extruders/ultimaker_original_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker_original_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker_original_plus_extruder_0.def.json b/resources/extruders/ultimaker_original_plus_extruder_0.def.json
index 91d0751861..fec40e93a9 100644
--- a/resources/extruders/ultimaker_original_plus_extruder_0.def.json
+++ b/resources/extruders/ultimaker_original_plus_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker_original_plus_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker_s3_extruder_left.def.json b/resources/extruders/ultimaker_s3_extruder_left.def.json
index 61d3149e0b..7af6f7d0dc 100644
--- a/resources/extruders/ultimaker_s3_extruder_left.def.json
+++ b/resources/extruders/ultimaker_s3_extruder_left.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker_s3_extruder_left",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker_s3_extruder_right.def.json b/resources/extruders/ultimaker_s3_extruder_right.def.json
index efcb6ae06a..7199710327 100644
--- a/resources/extruders/ultimaker_s3_extruder_right.def.json
+++ b/resources/extruders/ultimaker_s3_extruder_right.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker_s3_extruder_right",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
@@ -23,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/extruders/ultimaker_s5_extruder_left.def.json b/resources/extruders/ultimaker_s5_extruder_left.def.json
index 275f60bb31..24de85e9cc 100644
--- a/resources/extruders/ultimaker_s5_extruder_left.def.json
+++ b/resources/extruders/ultimaker_s5_extruder_left.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker_s5_extruder_left",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/ultimaker_s5_extruder_right.def.json b/resources/extruders/ultimaker_s5_extruder_right.def.json
index 92e08f5cc5..1e0ac3eace 100644
--- a/resources/extruders/ultimaker_s5_extruder_right.def.json
+++ b/resources/extruders/ultimaker_s5_extruder_right.def.json
@@ -1,5 +1,4 @@
{
- "id": "ultimaker_s5_extruder_right",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/uni_print_3d_extruder_0.def.json b/resources/extruders/uni_print_3d_extruder_0.def.json
index d0711fd458..747fb9e020 100644
--- a/resources/extruders/uni_print_3d_extruder_0.def.json
+++ b/resources/extruders/uni_print_3d_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "uni_print_3d_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/uniqbot_one_extruder_0.def.json b/resources/extruders/uniqbot_one_extruder_0.def.json
index 65436ee789..0a8982559d 100644
--- a/resources/extruders/uniqbot_one_extruder_0.def.json
+++ b/resources/extruders/uniqbot_one_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "uniqbot_one_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/vertex_delta_k8800_extruder_0.def.json b/resources/extruders/vertex_delta_k8800_extruder_0.def.json
index 5e09046faf..05a010222f 100644
--- a/resources/extruders/vertex_delta_k8800_extruder_0.def.json
+++ b/resources/extruders/vertex_delta_k8800_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "vertex_delta_k8800_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/vertex_k8400_dual_1st.def.json b/resources/extruders/vertex_k8400_dual_1st.def.json
index 86fb2266ba..947cfbc7d8 100644
--- a/resources/extruders/vertex_k8400_dual_1st.def.json
+++ b/resources/extruders/vertex_k8400_dual_1st.def.json
@@ -1,5 +1,4 @@
{
- "id": "vertex_k8400_dual_1st",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/vertex_k8400_dual_2nd.def.json b/resources/extruders/vertex_k8400_dual_2nd.def.json
index 306b2dcb7a..e606e46337 100644
--- a/resources/extruders/vertex_k8400_dual_2nd.def.json
+++ b/resources/extruders/vertex_k8400_dual_2nd.def.json
@@ -1,5 +1,4 @@
{
- "id": "vertex_k8400_dual_2nd",
"version": 2,
"name": "Extruder 2",
"inherits": "fdmextruder",
diff --git a/resources/extruders/vertex_k8400_extruder_0.def.json b/resources/extruders/vertex_k8400_extruder_0.def.json
index c03453b519..e0304f57bd 100644
--- a/resources/extruders/vertex_k8400_extruder_0.def.json
+++ b/resources/extruders/vertex_k8400_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "vertex_k8400_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/wanhao_d4s_extruder_0.def.json b/resources/extruders/wanhao_d4s_extruder_0.def.json
index 9a750e072c..bd6023faf4 100644
--- a/resources/extruders/wanhao_d4s_extruder_0.def.json
+++ b/resources/extruders/wanhao_d4s_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "wanhao_d4s_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/wanhao_d6_extruder_0.def.json b/resources/extruders/wanhao_d6_extruder_0.def.json
index a8a3bf15d3..093546eabf 100644
--- a/resources/extruders/wanhao_d6_extruder_0.def.json
+++ b/resources/extruders/wanhao_d6_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "wanhao_d6_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/wanhao_d6_plus_extruder_0.def.json b/resources/extruders/wanhao_d6_plus_extruder_0.def.json
index b2b1e6ab05..acc5b66072 100644
--- a/resources/extruders/wanhao_d6_plus_extruder_0.def.json
+++ b/resources/extruders/wanhao_d6_plus_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "wanhao_d6_plus_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/wanhao_d9_extruder_0.def.json b/resources/extruders/wanhao_d9_extruder_0.def.json
index 76d501e5a2..40fcf422f5 100644
--- a/resources/extruders/wanhao_d9_extruder_0.def.json
+++ b/resources/extruders/wanhao_d9_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "wanhao_d9_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/wanhao_duplicator5S_extruder_0.def.json b/resources/extruders/wanhao_duplicator5S_extruder_0.def.json
index 74f47158a3..7274d5117e 100644
--- a/resources/extruders/wanhao_duplicator5S_extruder_0.def.json
+++ b/resources/extruders/wanhao_duplicator5S_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "wanhao_duplicator5S_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/wanhao_duplicator5Smini_extruder_0.def.json b/resources/extruders/wanhao_duplicator5Smini_extruder_0.def.json
index 8c91de4685..3479c94e35 100644
--- a/resources/extruders/wanhao_duplicator5Smini_extruder_0.def.json
+++ b/resources/extruders/wanhao_duplicator5Smini_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "wanhao_duplicator5Smini_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/wanhao_i3_extruder_0.def.json b/resources/extruders/wanhao_i3_extruder_0.def.json
index 7d881079c4..387a456ff2 100644
--- a/resources/extruders/wanhao_i3_extruder_0.def.json
+++ b/resources/extruders/wanhao_i3_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "wanhao_i3_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/wanhao_i3mini_extruder_0.def.json b/resources/extruders/wanhao_i3mini_extruder_0.def.json
index c5abbd175e..2d52f0d126 100644
--- a/resources/extruders/wanhao_i3mini_extruder_0.def.json
+++ b/resources/extruders/wanhao_i3mini_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "wanhao_i3mini_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/wanhao_i3plus_extruder_0.def.json b/resources/extruders/wanhao_i3plus_extruder_0.def.json
index 0dae64ce63..103e3b9335 100644
--- a/resources/extruders/wanhao_i3plus_extruder_0.def.json
+++ b/resources/extruders/wanhao_i3plus_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "wanhao_i3plus_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/z-bolt_extruder_0.def.json b/resources/extruders/z-bolt_extruder_0.def.json
index 70e9f6177c..04c8d10cbb 100644
--- a/resources/extruders/z-bolt_extruder_0.def.json
+++ b/resources/extruders/z-bolt_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "z-bolt_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/zone3d_printer_extruder_0.def.json b/resources/extruders/zone3d_printer_extruder_0.def.json
index ca024dd5c4..fb8f40d3e2 100644
--- a/resources/extruders/zone3d_printer_extruder_0.def.json
+++ b/resources/extruders/zone3d_printer_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "zone3d_printer_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/extruders/zyyx_agile_extruder_0.def.json b/resources/extruders/zyyx_agile_extruder_0.def.json
index edda9b3097..c01ffb59f3 100644
--- a/resources/extruders/zyyx_agile_extruder_0.def.json
+++ b/resources/extruders/zyyx_agile_extruder_0.def.json
@@ -1,5 +1,4 @@
{
- "id": "zyyx_agile_extruder_0",
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
diff --git a/resources/i18n/cura.pot b/resources/i18n/cura.pot
index 4281c42eb8..40a0c03721 100644
--- a/resources/i18n/cura.pot
+++ b/resources/i18n/cura.pot
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0200\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-11-05 13:13+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:30
msgctxt "@action"
msgid "Machine Settings"
msgstr ""
@@ -40,13 +40,13 @@ msgctxt "@item:inlistbox"
msgid "G-code File"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:66
msgctxt "@error:not supported"
msgid "GCodeWriter does not support non-text mode."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:72
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:88
msgctxt "@warning:status"
msgid "Please prepare G-code before exporting."
msgstr ""
@@ -56,7 +56,7 @@ msgctxt "@info:title"
msgid "3D Model Assistant"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:90
+#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:92
#, python-brace-format
msgctxt "@info:status"
msgid ""
@@ -74,16 +74,6 @@ msgctxt "@action"
msgid "Update Firmware"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23
-msgctxt "@item:inmenu"
-msgid "Flatten active settings"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35
-msgctxt "@info:status"
-msgid "Profile has been flattened & activated."
-msgstr ""
-
#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "AMF File"
@@ -127,21 +117,6 @@ msgctxt "@message"
msgid "Print in Progress"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
-msgctxt "X3g Writer Plugin Description"
-msgid "Writes X3g to files"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21
-msgctxt "X3g Writer File Description"
-msgid "X3g File"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15
-msgctxt "X3G Writer File Description"
-msgid "X3G File"
-msgstr ""
-
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17
#: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17
msgctxt "@item:inlistbox"
@@ -213,9 +188,9 @@ msgid "Could not save to removable drive {0}: {1}"
msgstr ""
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1634
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:139
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:146
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1668
msgctxt "@info:title"
msgid "Error"
msgstr ""
@@ -245,8 +220,8 @@ msgstr ""
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1624
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1724
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1658
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1758
msgctxt "@info:title"
msgid "Warning"
msgstr ""
@@ -278,17 +253,17 @@ msgctxt "@action"
msgid "Connect via Network"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:57
msgctxt "@action:button Preceded by 'Ready to'."
msgid "Print over network"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:58
msgctxt "@properties:tooltip"
msgid "Print over network"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:59
msgctxt "@info:status"
msgid "Connected over the network"
msgstr ""
@@ -303,6 +278,23 @@ msgctxt "@info:title"
msgid "Print error"
msgstr ""
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:21
+msgctxt "@info:title"
+msgid "New cloud printers found"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:22
+msgctxt "@info:message"
+msgid ""
+"New printers have been found connected to your account, you can find them in "
+"your list of discovered printers."
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:27
+msgctxt "@info:option_text"
+msgid "Do not show this message again"
+msgstr ""
+
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
@@ -513,7 +505,7 @@ msgid "GIF Image"
msgstr ""
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
-msgctxt "@item:inlistbox"
+msgctxt "@item:inlistbox 'Open' is part of the name of this file format."
msgid "Open Compressed Triangle Mesh"
msgstr ""
@@ -618,12 +610,12 @@ msgctxt "@info:tooltip"
msgid "Configure Per Model Settings"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:186
msgctxt "@title:tab"
msgid "Recommended"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:188
msgctxt "@title:tab"
msgid "Custom"
msgstr ""
@@ -634,13 +626,13 @@ msgctxt "@item:inlistbox"
msgid "3MF File"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:198
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:651
msgctxt "@label"
msgid "Nozzle"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:496
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid ""
@@ -649,7 +641,7 @@ msgid ""
"instead."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:499
msgctxt "@info:title"
msgid "Open Project File"
msgstr ""
@@ -731,16 +723,6 @@ msgctxt "@item:inlistbox"
msgid "Cura Profile"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12
-msgctxt "@item:inmenu"
-msgid "Profile Assistant"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:18
-msgctxt "@item:inlistbox"
-msgid "Profile Assistant"
-msgstr ""
-
#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26
msgctxt "@item:inlistbox"
msgid "3MF file"
@@ -761,7 +743,6 @@ msgctxt "@item:inmenu"
msgid "Preview"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:19
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18
msgctxt "@action"
msgid "Select upgrades"
@@ -777,19 +758,24 @@ msgctxt "@info:title"
msgid "Login failed"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:36
msgctxt "@info:not supported profile"
msgid "Not supported"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:55
+msgctxt "@info:No intent profile selected"
+msgid "Default"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:196
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:125
msgctxt "@title:window"
msgid "File Already Exists"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:197
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:126
#, python-brace-format
msgctxt "@label Don't translate the XML tag !"
msgid ""
@@ -797,36 +783,45 @@ msgid ""
"overwrite it?"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:427
#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:430
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:433
msgctxt "@info:status"
msgid "Invalid file URL:"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:780
msgctxt "@info:message Followed by a list of settings."
msgid ""
"Settings have been changed to match the current availability of extruders:"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:782
msgctxt "@info:title"
msgid "Settings updated"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1334
msgctxt "@info:title"
msgid "Extruder(s) Disabled"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1457
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:99
+#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+msgctxt "@label"
+msgid "Unknown"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid ""
"Failed to export profile to {0}: {1}"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid ""
@@ -834,44 +829,44 @@ msgid ""
"failure."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:149
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Exported profile to {0}"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150
msgctxt "@info:title"
msgid "Export succeeded"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}: {1}"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:181
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid ""
"Can't import profile from {0} before a printer is added."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:198
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "No custom profile to import in file {0}"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:202
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}:"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:226
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:236
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid ""
@@ -879,41 +874,41 @@ msgid ""
"import it."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:325
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to import profile from {0}:"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:328
#, python-brace-format
msgctxt "@info:status"
msgid "Successfully imported profile {0}"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:331
#, python-brace-format
msgctxt "@info:status"
msgid "File {0} does not contain any valid profile."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:334
#, python-brace-format
msgctxt "@info:status"
msgid "Profile {0} has an unknown file type or is corrupted."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369
msgctxt "@label"
msgid "Custom profile"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:385
msgctxt "@info:status"
msgid "Profile is missing a quality type."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:399
#, python-brace-format
msgctxt "@info:status"
msgid "Could not find a quality type {0} for the current configuration."
@@ -979,14 +974,13 @@ msgctxt "@tooltip"
msgid "Other"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:306
+#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:302
#, python-brace-format
msgctxt "@label"
msgid "Pre-sliced file {0}"
msgstr ""
#: /home/ruben/Projects/Cura/cura/UI/WelcomePagesModel.py:56
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:62
msgctxt "@action:button"
msgid "Next"
msgstr ""
@@ -1000,9 +994,9 @@ msgstr ""
#: /home/ruben/Projects/Cura/cura/UI/WhatsNewPagesModel.py:17
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:133
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:169
msgctxt "@action:button"
msgid "Close"
msgstr ""
@@ -1017,39 +1011,90 @@ msgstr ""
#: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:18
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:19
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:81
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:352
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:42
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:58
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:149
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:406
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:294
msgctxt "@action:button"
msgid "Cancel"
msgstr ""
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:36
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:320
+msgctxt "@label"
+msgid "Default"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:39
+msgctxt "@label"
+msgid "Visual"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:40
+msgctxt "@text"
+msgid ""
+"The visual profile is designed to print visual prototypes and models with "
+"the intent of high visual and surface quality."
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:43
+msgctxt "@label"
+msgid "Engineering"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:44
+msgctxt "@text"
+msgid ""
+"The engineering profile is designed to print functional prototypes and end-"
+"use parts with the intent of better accuracy and for closer tolerances."
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:47
+msgctxt "@label"
+msgid "Draft"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:48
+msgctxt "@text"
+msgid ""
+"The draft profile is designed to print initial prototypes and concept "
+"validation with the intent of significant print time reduction."
+msgstr ""
+
#: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208
msgctxt "@menuitem"
msgid "Not overridden"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:109
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:357
+msgctxt "@label"
+msgid "Custom profiles"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:391
#, python-brace-format
msgctxt "@item:inlistbox"
msgid "All Supported Types ({0})"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:110
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:392
msgctxt "@item:inlistbox"
msgid "All Files (*)"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:213
msgctxt "@label"
-msgid "Unknown"
+msgid "Custom Material"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:214
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:205
+msgctxt "@label"
+msgid "Custom"
msgstr ""
#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116
@@ -1063,17 +1108,6 @@ msgctxt "@label"
msgid "Available networked printers"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689
-msgctxt "@label"
-msgid "Custom Material"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:690
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:203
-msgctxt "@label"
-msgid "Custom"
-msgstr ""
-
#: /home/ruben/Projects/Cura/cura/BuildVolume.py:90
msgctxt "@info:status"
msgid ""
@@ -1111,11 +1145,6 @@ msgctxt "@info"
msgid "Unable to reach the Ultimaker account server."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202
-msgctxt "@action:button"
-msgid "Retry"
-msgstr ""
-
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70
msgctxt "@message"
msgid "Please give the required permissions when authorizing this application."
@@ -1301,22 +1330,27 @@ msgctxt "@action:button"
msgid "Send report"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:513
msgctxt "@info:progress"
msgid "Loading machines..."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:520
+msgctxt "@info:progress"
+msgid "Setting up preferences..."
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:824
msgctxt "@info:progress"
msgid "Setting up scene..."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:859
msgctxt "@info:progress"
msgid "Loading interface..."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1150
#, python-format
msgctxt ""
"@info 'width', 'depth' and 'height' are variable names that must NOT be "
@@ -1324,41 +1358,41 @@ msgctxt ""
msgid "%(width).1f x %(depth).1f x %(height).1f mm"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1657
#, python-brace-format
msgctxt "@info:status"
msgid "Only one G-code file can be loaded at a time. Skipped importing {0}"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1667
#, python-brace-format
msgctxt "@info:status"
msgid "Can't open any other file if G-code is loading. Skipped importing {0}"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1757
msgctxt "@info:status"
msgid "The selected model was too small to load."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:56
msgctxt "@title:label"
msgid "Printer Settings"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70
msgctxt "@label"
msgid "X (Width)"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:76
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:90
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:104
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:206
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:225
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:244
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:74
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:88
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:102
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:203
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:223
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:243
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:265
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:285
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:79
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:93
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:109
@@ -1367,57 +1401,57 @@ msgctxt "@label"
msgid "mm"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84
msgctxt "@label"
msgid "Y (Depth)"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98
msgctxt "@label"
msgid "Z (Height)"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112
msgctxt "@label"
msgid "Build plate shape"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125
msgctxt "@label"
msgid "Origin at center"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137
msgctxt "@label"
msgid "Heated bed"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149
msgctxt "@label"
msgid "Heated build volume"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:161
msgctxt "@label"
msgid "G-code flavor"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:185
msgctxt "@title:label"
msgid "Printhead Settings"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:199
msgctxt "@label"
msgid "X min"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:219
msgctxt "@label"
msgid "Y min"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:239
msgctxt "@label"
msgid "X max"
msgstr ""
@@ -1427,22 +1461,22 @@ msgctxt "@label"
msgid "Y max"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:281
msgctxt "@label"
msgid "Gantry Height"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:295
msgctxt "@label"
msgid "Number of Extruders"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:355
msgctxt "@title:label"
msgid "Start G-code"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:366
msgctxt "@title:label"
msgid "End G-code"
msgstr ""
@@ -1522,7 +1556,7 @@ msgstr ""
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:77
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:44
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:89
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417
msgctxt "@title:tab"
msgid "Materials"
@@ -1716,11 +1750,6 @@ msgctxt "@label:table_header"
msgid "Machine"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131
-msgctxt "@label:table_header"
-msgid "Print Core"
-msgstr ""
-
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137
msgctxt "@label:table_header"
msgid "Build Plate"
@@ -1991,9 +2020,9 @@ msgid "Edit"
msgstr ""
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:88
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:155
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:138
msgctxt "@action:button"
msgid "Remove"
msgstr ""
@@ -2016,61 +2045,61 @@ msgctxt "@label"
msgid "Type"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:225
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274
msgctxt "@label"
msgid "Firmware version"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:239
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:290
msgctxt "@label"
msgid "Address"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:263
msgctxt "@label"
msgid "This printer is not set up to host a group of printers."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:267
msgctxt "@label"
msgid "This printer is the host for a group of %1 printers."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:278
msgctxt "@label"
msgid "The printer at this address has not yet responded."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283
msgctxt "@action:button"
msgid "Connect"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:296
msgctxt "@title:window"
msgid "Invalid IP address"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146
msgctxt "@text"
msgid "Please enter a valid IP address."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:308
msgctxt "@title:window"
msgid "Printer Address"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:331
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102
msgctxt "@label"
msgid "Enter the IP address of your printer on the network."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181
msgctxt "@action:button"
@@ -2125,17 +2154,17 @@ msgctxt "@label:status"
msgid "Finishes %1 at %2"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44
-msgctxt "@action:button"
-msgid "Print"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:11
msgctxt "@title:window"
msgid "Print over network"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:52
+msgctxt "@action:button"
+msgid "Print"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:80
msgctxt "@label"
msgid "Printer selection"
msgstr ""
@@ -2493,70 +2522,69 @@ msgctxt "@action:label"
msgid "Smoothing"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37
-msgctxt "@label"
-msgid "Mesh Type"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68
-msgctxt "@label"
-msgid "Normal model"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75
-msgctxt "@label"
-msgid "Print as support"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83
-msgctxt "@label"
-msgid "Don't support overlap with other models"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91
-msgctxt "@label"
-msgid "Modify settings for overlap with other models"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99
-msgctxt "@label"
-msgid "Modify settings for infill of other models"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:346
-msgctxt "@action:button"
-msgid "Select settings"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:388
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:13
msgctxt "@title:window"
msgid "Select Settings to Customize for this model"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:56
#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:94
msgctxt "@label:textbox"
msgid "Filter..."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:70
msgctxt "@label:checkbox"
msgid "Show all"
msgstr ""
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:44
+msgctxt "@label"
+msgid "Mesh Type"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:85
+msgctxt "@label"
+msgid "Normal model"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:97
+msgctxt "@label"
+msgid "Print as support"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:109
+msgctxt "@label"
+msgid "Modify settings for overlaps"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:121
+msgctxt "@label"
+msgid "Don't support overlaps"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:145
+msgctxt "@action:checkbox"
+msgid "Infill only"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:368
+msgctxt "@action:button"
+msgid "Select settings"
+msgstr ""
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:14
msgctxt "@title:window"
msgid "Open Project"
msgstr ""
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:58
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Update/override existing profile"
msgid "Update existing"
msgstr ""
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:59
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Save settings in a new profile"
msgid "Create new"
msgstr ""
@@ -2583,6 +2611,11 @@ msgctxt "@action:ComboBox option"
msgid "Update"
msgstr ""
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
+msgctxt "@action:ComboBox option"
+msgid "Create new"
+msgstr ""
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:106
msgctxt "@action:label"
@@ -2596,7 +2629,7 @@ msgid "Printer Group"
msgstr ""
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:220
msgctxt "@action:label"
msgid "Profile settings"
msgstr ""
@@ -2607,75 +2640,81 @@ msgid "How should the conflict in the profile be resolved?"
msgstr ""
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:323
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:244
msgctxt "@action:label"
msgid "Name"
msgstr ""
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261
+msgctxt "@action:label"
+msgid "Intent"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:246
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228
msgctxt "@action:label"
msgid "Not in profile"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:251
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:233
msgctxt "@action:label"
msgid "%1 override"
msgid_plural "%1 overrides"
msgstr[0] ""
msgstr[1] ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:247
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:262
msgctxt "@action:label"
msgid "Derivative from"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:252
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:267
msgctxt "@action:label"
msgid "%1, %2 override"
msgid_plural "%1, %2 overrides"
msgstr[0] ""
msgstr[1] ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:268
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:283
msgctxt "@action:label"
msgid "Material settings"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:284
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:299
msgctxt "@info:tooltip"
msgid "How should the conflict in the material be resolved?"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:342
msgctxt "@action:label"
msgid "Setting visibility"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:336
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:351
msgctxt "@action:label"
msgid "Mode"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:367
msgctxt "@action:label"
msgid "Visible settings:"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:372
msgctxt "@action:label"
msgid "%1 out of %2"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:383
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:398
msgctxt "@action:warning"
msgid "Loading a project will clear all models on the build plate."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:401
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:416
msgctxt "@action:button"
msgid "Open"
msgstr ""
@@ -2788,54 +2827,6 @@ msgctxt "@checkbox:description"
msgid "Automatically create a backup each day that Cura is started."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMainSettingsSelector.qml:75
-msgctxt "@label"
-msgid "Not supported"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:35
-msgctxt "@action:button"
-msgid "Previous"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:174
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:159
-msgctxt "@action:button"
-msgid "Export"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209
-msgctxt "@label"
-msgid "Tip"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMaterialMenu.qml:20
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66
-msgctxt "@label:category menu label"
-msgid "Generic"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:160
-msgctxt "@label"
-msgid "Print experiment"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:25
-msgctxt "@label"
-msgid "Checklist"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:30
-msgctxt "@label"
-msgid "Please select any upgrades made to this Ultimaker 2."
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:44
-msgctxt "@label"
-msgid "Olsson Block"
-msgstr ""
-
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:30
msgctxt "@title"
msgid "Build Plate Leveling"
@@ -2927,174 +2918,180 @@ msgctxt "@label"
msgid "Are you sure you want to abort the print?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:72
msgctxt "@title"
msgid "Information"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
msgctxt "@title:window"
msgid "Confirm Diameter Change"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:102
msgctxt "@label (%1 is a number)"
msgid ""
"The new filament diameter is set to %1 mm, which is not compatible with the "
"current extruder. Do you wish to continue?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:128
msgctxt "@label"
msgid "Display Name"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:138
msgctxt "@label"
msgid "Brand"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:148
msgctxt "@label"
msgid "Material Type"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:158
msgctxt "@label"
msgid "Color"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:208
msgctxt "@label"
msgid "Properties"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:210
msgctxt "@label"
msgid "Density"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:225
msgctxt "@label"
msgid "Diameter"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:259
msgctxt "@label"
msgid "Filament Cost"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:276
msgctxt "@label"
msgid "Filament weight"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:294
msgctxt "@label"
msgid "Filament length"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:303
msgctxt "@label"
msgid "Cost per Meter"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:317
msgctxt "@label"
msgid "This material is linked to %1 and shares some of its properties."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:324
msgctxt "@label"
msgid "Unlink Material"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:335
msgctxt "@label"
msgid "Description"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:348
msgctxt "@label"
msgid "Adhesion Information"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:374
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19
msgctxt "@label"
msgid "Print settings"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:108
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:84
msgctxt "@action:button"
msgid "Activate"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:126
msgctxt "@action:button"
msgid "Create"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:140
msgctxt "@action:button"
msgid "Duplicate"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:170
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:167
msgctxt "@action:button"
msgid "Import"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:184
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:179
+msgctxt "@action:button"
+msgid "Export"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:233
msgctxt "@action:label"
msgid "Printer"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:297
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:274
msgctxt "@title:window"
msgid "Confirm Remove"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:275
msgctxt "@label (%1 is object name)"
msgid "Are you sure you wish to remove %1? This cannot be undone!"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:322
msgctxt "@title:window"
msgid "Import Material"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:323
msgctxt "@info:status Don't translate the XML tags or !"
msgid ""
"Could not import material %1: %2"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:327
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully imported material %1"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
msgctxt "@title:window"
msgid "Export Material"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:357
msgctxt "@info:status Don't translate the XML tags and !"
msgid ""
"Failed to export material to %1: %2"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:363
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully exported material to %1"
msgstr ""
@@ -3109,27 +3106,27 @@ msgctxt "@label:textbox"
msgid "Check all"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:48
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
msgctxt "@info:status"
msgid "Calculated"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
msgctxt "@title:column"
msgid "Setting"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:68
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:82
msgctxt "@title:column"
msgid "Profile"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:89
msgctxt "@title:column"
msgid "Current"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:83
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:97
msgctxt "@title:column"
msgid "Unit"
msgstr ""
@@ -3140,241 +3137,251 @@ msgctxt "@title:tab"
msgid "General"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:132
msgctxt "@label"
msgid "Interface"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:143
msgctxt "@label"
msgid "Language:"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:210
msgctxt "@label"
msgid "Currency:"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:223
msgctxt "@label"
msgid "Theme:"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:279
msgctxt "@label"
msgid ""
"You will need to restart the application for these changes to have effect."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:296
msgctxt "@info:tooltip"
msgid "Slice automatically when changing settings."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:304
msgctxt "@option:check"
msgid "Slice automatically"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:318
msgctxt "@label"
msgid "Viewport behavior"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:326
msgctxt "@info:tooltip"
msgid ""
"Highlight unsupported areas of the model in red. Without support these areas "
"will not print properly."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:335
msgctxt "@option:check"
msgid "Display overhang"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:343
msgctxt "@info:tooltip"
msgid ""
"Moves the camera so the model is in the center of the view when a model is "
"selected"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348
msgctxt "@action:button"
msgid "Center camera when item is selected"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:358
msgctxt "@info:tooltip"
msgid "Should the default zoom behavior of cura be inverted?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:363
msgctxt "@action:button"
msgid "Invert the direction of camera zoom."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Should zooming move in the direction of the mouse?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid ""
"Zooming towards the mouse is not supported in the orthographic perspective."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384
msgctxt "@action:button"
msgid "Zoom toward mouse direction"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:410
msgctxt "@info:tooltip"
msgid ""
"Should models on the platform be moved so that they no longer intersect?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415
msgctxt "@option:check"
msgid "Ensure models are kept apart"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:424
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved down to touch the build plate?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:429
msgctxt "@option:check"
msgid "Automatically drop models to the build plate"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441
msgctxt "@info:tooltip"
msgid "Show caution message in g-code reader."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
msgctxt "@option:check"
msgid "Caution message in g-code reader"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:458
msgctxt "@info:tooltip"
msgid "Should layer be forced into compatibility mode?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:463
msgctxt "@option:check"
msgid "Force layer view compatibility mode (restart required)"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:473
+msgctxt "@info:tooltip"
+msgid "Should Cura open at the location it was closed?"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:478
+msgctxt "@option:check"
+msgid "Restore window position on start"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:488
msgctxt "@info:tooltip"
msgid "What type of camera rendering should be used?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495
msgctxt "@window:text"
-msgid "Camera rendering: "
+msgid "Camera rendering:"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506
msgid "Perspective"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507
msgid "Orthographic"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538
msgctxt "@label"
msgid "Opening and saving files"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:545
msgctxt "@info:tooltip"
msgid "Should models be scaled to the build volume if they are too large?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:550
msgctxt "@option:check"
msgid "Scale large models"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:560
msgctxt "@info:tooltip"
msgid ""
"An model may appear extremely small if its unit is for example in meters "
"rather than millimeters. Should these models be scaled up?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:565
msgctxt "@option:check"
msgid "Scale extremely small models"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575
msgctxt "@info:tooltip"
msgid "Should models be selected after they are loaded?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:580
msgctxt "@option:check"
msgid "Select models when loaded"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590
msgctxt "@info:tooltip"
msgid ""
"Should a prefix based on the printer name be added to the print job name "
"automatically?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:595
msgctxt "@option:check"
msgid "Add machine prefix to job name"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:605
msgctxt "@info:tooltip"
msgid "Should a summary be shown when saving a project file?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609
msgctxt "@option:check"
msgid "Show summary dialog when saving project"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
msgctxt "@info:tooltip"
msgid "Default behavior when opening a project file"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:627
msgctxt "@window:text"
msgid "Default behavior when opening a project file: "
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641
msgctxt "@option:openProject"
msgid "Always ask me this"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:642
msgctxt "@option:openProject"
msgid "Always open as a project"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:643
msgctxt "@option:openProject"
msgid "Always import models"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:679
msgctxt "@info:tooltip"
msgid ""
"When you have made changes to a profile and switched to a different one, a "
@@ -3382,50 +3389,51 @@ msgid ""
"not, or you can choose a default behaviour and never show that dialog again."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:52
msgctxt "@label"
msgid "Profiles"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:693
msgctxt "@window:text"
msgid ""
"Default behavior for changed setting values when switching to a different "
"profile: "
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:707
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157
msgctxt "@option:discardOrKeep"
msgid "Always ask me this"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708
msgctxt "@option:discardOrKeep"
msgid "Always discard changed settings"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:709
msgctxt "@option:discardOrKeep"
msgid "Always transfer changed settings to new profile"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743
msgctxt "@label"
msgid "Privacy"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:750
msgctxt "@info:tooltip"
msgid "Should Cura check for updates when the program is started?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:755
msgctxt "@option:check"
msgid "Check for updates on start"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:765
msgctxt "@info:tooltip"
msgid ""
"Should anonymous data about your print be sent to Ultimaker? Note, no "
@@ -3433,33 +3441,16 @@ msgid ""
"stored."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:770
msgctxt "@option:check"
msgid "Send (anonymous) print information"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:779
msgctxt "@action:button"
msgid "More information"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:774
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:27
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ProfileMenu.qml:23
-msgctxt "@label"
-msgid "Experimental"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781
-msgctxt "@info:tooltip"
-msgid "Use multi build plate functionality"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786
-msgctxt "@option:check"
-msgid "Use multi build plate functionality (restart required)"
-msgstr ""
-
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415
msgctxt "@title:tab"
@@ -3467,95 +3458,86 @@ msgid "Printers"
msgstr ""
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152
msgctxt "@action:button"
msgid "Rename"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:34
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419
msgctxt "@title:tab"
msgid "Profiles"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:104
msgctxt "@label"
msgid "Create"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
msgctxt "@label"
msgid "Duplicate"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:202
msgctxt "@title:window"
msgid "Create Profile"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:204
msgctxt "@info"
msgid "Please provide a name for this profile."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:260
msgctxt "@title:window"
msgid "Duplicate Profile"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:291
msgctxt "@title:window"
msgid "Rename Profile"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:304
msgctxt "@title:window"
msgid "Import Profile"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:333
msgctxt "@title:window"
msgid "Export Profile"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:396
msgctxt "@label %1 is printer name"
msgid "Printer: %1"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Default profiles"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Custom profiles"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:554
msgctxt "@action:button"
msgid "Update profile with current settings/overrides"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:561
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:257
msgctxt "@action:button"
msgid "Discard current changes"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:580
msgctxt "@action:label"
msgid ""
"This profile uses the defaults specified by the printer, so it has no "
"settings/overrides in the list below."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:588
msgctxt "@action:label"
msgid "Your current settings match the selected profile."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:606
msgctxt "@title:tab"
msgid "Global Settings"
msgstr ""
@@ -3622,35 +3604,35 @@ msgstr ""
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:68
msgctxt "@label:textbox"
-msgid "search settings"
+msgid "Search settings"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:462
msgctxt "@action:menu"
msgid "Copy value to all extruders"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:471
msgctxt "@action:menu"
msgid "Copy all changed values to all extruders"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:508
msgctxt "@action:menu"
msgid "Hide this setting"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:521
msgctxt "@action:menu"
msgid "Don't show this setting"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
msgctxt "@action:menu"
msgid "Keep this setting visible"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434
msgctxt "@action:menu"
msgid "Configure setting visibility..."
@@ -3682,19 +3664,19 @@ msgctxt "@label Header for list of settings."
msgid "Affected By"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:187
msgctxt "@label"
msgid ""
"This setting is always shared between all extruders. Changing it here will "
"change the value for all extruders."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:191
msgctxt "@label"
msgid "The value is resolved from per-extruder values "
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:230
msgctxt "@label"
msgid ""
"This setting has a value that is different from the profile.\n"
@@ -3702,7 +3684,7 @@ msgid ""
"Click to restore the value of the profile."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:329
msgctxt "@label"
msgid ""
"This setting is normally calculated, but it currently has an absolute value "
@@ -3711,6 +3693,19 @@ msgid ""
"Click to restore the calculated value."
msgstr ""
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/NoIntentIcon.qml:31
+msgctxt ""
+"@label %1 is filled in with the type of a profile. %2 is filled with a list "
+"of numbers (eg '1' or '1, 2')"
+msgid ""
+"There is no %1 profile for the configuration in extruder %2. The default "
+"intent will be used instead"
+msgid_plural ""
+"There is no %1 profile for the configurations in extruders %2. The default "
+"intent will be used instead"
+msgstr[0] ""
+msgstr[1] ""
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:144
msgctxt "@button"
msgid "Recommended"
@@ -3756,32 +3751,13 @@ msgid ""
"your object which is easy to cut off afterwards."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:175
-msgctxt "@label"
-msgid "Layer Height"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:206
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:81
msgctxt "@tooltip"
msgid ""
"You have modified some profile settings. If you want to change these go to "
"custom mode."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:355
-msgctxt "@tooltip"
-msgid ""
-"This quality profile is not available for your current material and nozzle "
-"configuration. Please change these to enable this quality profile."
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449
-msgctxt "@tooltip"
-msgid ""
-"A custom profile is currently active. To enable the quality slider, choose a "
-"default quality profile in Custom tab"
-msgstr ""
-
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:13
msgctxt "@label:Should be short"
msgid "On"
@@ -3792,12 +3768,17 @@ msgctxt "@label:Should be short"
msgid "Off"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:27
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:33
+msgctxt "@label"
+msgid "Experimental"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:47
msgctxt "@label"
msgid "Profile"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:94
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:172
msgctxt "@tooltip"
msgid ""
"Some setting/override values are different from the values stored in the "
@@ -3806,6 +3787,11 @@ msgid ""
"Click to open the profile manager."
msgstr ""
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:160
+msgctxt "@label:header"
+msgid "Custom profiles"
+msgstr ""
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:21
msgctxt "@label shown when we load a Gcode file"
msgid "Print setup disabled. G-code file can not be modified."
@@ -3945,11 +3931,16 @@ msgctxt "@label:category menu label"
msgid "Material"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:42
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:46
msgctxt "@label:category menu label"
msgid "Favorites"
msgstr ""
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:71
+msgctxt "@label:category menu label"
+msgid "Generic"
+msgstr ""
+
#: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25
msgctxt "@label:category menu label"
msgid "Network enabled printers"
@@ -3985,16 +3976,6 @@ msgctxt "@action:inmenu"
msgid "Disable Extruder"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63
-msgctxt "@title:menu"
-msgid "&Build plate"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66
-msgctxt "@title:settings"
-msgid "&Profile"
-msgstr ""
-
#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:19
msgctxt "@action:inmenu menubar:view"
msgid "&Camera position"
@@ -4074,12 +4055,12 @@ msgctxt "@header"
msgid "Configurations"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:110
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:112
msgctxt "@label"
msgid "Select configuration"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:223
msgctxt "@label"
msgid "Configurations"
msgstr ""
@@ -4110,12 +4091,12 @@ msgctxt "@label"
msgid "Enabled"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:251
msgctxt "@label"
msgid "Material"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:375
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:378
msgctxt "@label"
msgid "Use glue for better adhesion with this material combination."
msgstr ""
@@ -4531,34 +4512,34 @@ msgctxt "@title:tab"
msgid "Settings"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538
msgctxt "@title:window"
msgid "Closing Cura"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551
msgctxt "@label"
msgid "Are you sure you want to exit Cura?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:589
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19
msgctxt "@title:window"
msgid "Open file(s)"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:695
msgctxt "@window:title"
msgid "Install Package"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:703
msgctxt "@title:window"
msgid "Open File(s)"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:706
msgctxt "@text:window"
msgid ""
"We have found one or more G-Code files within the files you have selected. "
@@ -4566,12 +4547,12 @@ msgid ""
"file, please just select only one."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:809
msgctxt "@title:window"
msgid "Add Printer"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:817
msgctxt "@title:window"
msgid "What's New"
msgstr ""
@@ -4640,139 +4621,139 @@ msgctxt "@title:window"
msgid "About Cura"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:56
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:57
msgctxt "@label"
msgid "version: %1"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:72
msgctxt "@label"
msgid "End-to-end solution for fused filament 3D printing."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:84
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:85
msgctxt "@info:credit"
msgid ""
"Cura is developed by Ultimaker B.V. in cooperation with the community.\n"
"Cura proudly uses the following open source projects:"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
msgctxt "@label"
msgid "Graphical user interface"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
msgctxt "@label"
msgid "Application framework"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
msgctxt "@label"
msgid "G-code generator"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:138
msgctxt "@label"
msgid "Interprocess communication library"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:139
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
msgctxt "@label"
msgid "Programming language"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
msgctxt "@label"
msgid "GUI framework"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
msgctxt "@label"
msgid "GUI framework bindings"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
msgctxt "@label"
msgid "C/C++ Binding library"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
msgctxt "@label"
msgid "Data interchange format"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
msgctxt "@label"
msgid "Support library for scientific computing"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
msgctxt "@label"
msgid "Support library for faster math"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
msgctxt "@label"
msgid "Support library for handling STL files"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
msgctxt "@label"
msgid "Support library for handling planar objects"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
msgctxt "@label"
msgid "Support library for handling triangular meshes"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
msgctxt "@label"
msgid "Support library for analysis of complex networks"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
msgctxt "@label"
msgid "Support library for handling 3MF files"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
msgctxt "@label"
msgid "Support library for file metadata and streaming"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
msgctxt "@label"
msgid "Serial communication library"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
msgctxt "@label"
msgid "ZeroConf discovery library"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
msgctxt "@label"
msgid "Polygon clipping library"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:156
msgctxt "@Label"
msgid "Python HTTP library"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:157
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
msgctxt "@label"
msgid "Font"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
msgctxt "@label"
msgid "SVG icons"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:160
msgctxt "@label"
msgid "Linux cross-distribution application deployment"
msgstr ""
@@ -4795,32 +4776,27 @@ msgctxt "@title:window"
msgid "Save Project"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149
-msgctxt "@action:label"
-msgid "Build plate"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:177
msgctxt "@action:label"
msgid "Extruder %1"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:192
msgctxt "@action:label"
msgid "%1 & material"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:194
msgctxt "@action:label"
msgid "Material"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
msgctxt "@action:label"
msgid "Don't show project summary on save again"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:302
msgctxt "@action:button"
msgid "Save"
msgstr ""
@@ -5003,12 +4979,12 @@ msgctxt "@label"
msgid "Troubleshooting"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:211
msgctxt "@label"
msgid "Printer name"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:224
msgctxt "@text"
msgid "Please give your printer a name"
msgstr ""
@@ -5065,6 +5041,31 @@ msgctxt "@button"
msgid "Get started"
msgstr ""
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:27
+msgctxt "@info:tooltip"
+msgid "3D View"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:40
+msgctxt "@info:tooltip"
+msgid "Front View"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:53
+msgctxt "@info:tooltip"
+msgid "Top View"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:66
+msgctxt "@info:tooltip"
+msgid "Left View"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:79
+msgctxt "@info:tooltip"
+msgid "Right View"
+msgstr ""
+
#: MachineSettingsAction/plugin.json
msgctxt "description"
msgid ""
@@ -5129,16 +5130,6 @@ msgctxt "name"
msgid "Model Checker"
msgstr ""
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "description"
-msgid "Dump the contents of all settings to a HTML file."
-msgstr ""
-
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "name"
-msgid "God Mode"
-msgstr ""
-
#: FirmwareUpdater/plugin.json
msgctxt "description"
msgid "Provides a machine actions for updating firmware."
@@ -5149,16 +5140,6 @@ msgctxt "name"
msgid "Firmware Updater"
msgstr ""
-#: ProfileFlattener/plugin.json
-msgctxt "description"
-msgid "Create a flattened quality changes profile."
-msgstr ""
-
-#: ProfileFlattener/plugin.json
-msgctxt "name"
-msgid "Profile Flattener"
-msgstr ""
-
#: AMFReader/plugin.json
msgctxt "description"
msgid "Provides support for reading AMF files."
@@ -5361,6 +5342,16 @@ msgctxt "name"
msgid "Version Upgrade 3.3 to 3.4"
msgstr ""
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "description"
+msgid "Upgrades configurations from Cura 4.3 to Cura 4.4."
+msgstr ""
+
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "name"
+msgid "Version Upgrade 4.3 to 4.4"
+msgstr ""
+
#: VersionUpgrade/VersionUpgrade25to26/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 2.5 to Cura 2.6."
@@ -5561,18 +5552,6 @@ msgctxt "name"
msgid "Cura Profile Writer"
msgstr ""
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "description"
-msgid ""
-"Allows material manufacturers to create new material and quality profiles "
-"using a drop-in UI."
-msgstr ""
-
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "name"
-msgid "Print Profile Assistant"
-msgstr ""
-
#: 3MFWriter/plugin.json
msgctxt "description"
msgid "Provides support for writing 3MF files."
diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po
index e01c04a2f2..3b0073bc31 100644
--- a/resources/i18n/de_DE/cura.po
+++ b/resources/i18n/de_DE/cura.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0200\n"
+"POT-Creation-Date: 2019-11-05 13:13+0100\n"
"PO-Revision-Date: 2019-07-29 15:51+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: German , German \n"
@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.2.3\n"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:30
msgctxt "@action"
msgid "Machine Settings"
msgstr "Geräteeinstellungen"
@@ -40,13 +40,13 @@ msgctxt "@item:inlistbox"
msgid "G-code File"
msgstr "G-Code-Datei"
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:66
msgctxt "@error:not supported"
msgid "GCodeWriter does not support non-text mode."
msgstr "GCodeWriter unterstützt keinen Nicht-Textmodus."
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:72
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:88
msgctxt "@warning:status"
msgid "Please prepare G-code before exporting."
msgstr "Vor dem Exportieren bitte G-Code vorbereiten."
@@ -56,7 +56,7 @@ msgctxt "@info:title"
msgid "3D Model Assistant"
msgstr "3D-Modell-Assistent"
-#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:90
+#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:92
#, python-brace-format
msgctxt "@info:status"
msgid ""
@@ -75,16 +75,6 @@ msgctxt "@action"
msgid "Update Firmware"
msgstr "Firmware aktualisieren"
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23
-msgctxt "@item:inmenu"
-msgid "Flatten active settings"
-msgstr "Einstellungen Glätten aktiv"
-
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35
-msgctxt "@info:status"
-msgid "Profile has been flattened & activated."
-msgstr "Das Profil wurde geglättet und aktiviert."
-
#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "AMF File"
@@ -125,21 +115,6 @@ msgctxt "@message"
msgid "Print in Progress"
msgstr "Druck in Bearbeitung"
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
-msgctxt "X3g Writer Plugin Description"
-msgid "Writes X3g to files"
-msgstr "Schreibt X3g in Dateien"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21
-msgctxt "X3g Writer File Description"
-msgid "X3g File"
-msgstr "X3g-Datei"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15
-msgctxt "X3G Writer File Description"
-msgid "X3G File"
-msgstr "X3G-Datei"
-
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17
#: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17
msgctxt "@item:inlistbox"
@@ -211,9 +186,9 @@ msgid "Could not save to removable drive {0}: {1}"
msgstr "Konnte nicht auf dem Wechseldatenträger gespeichert werden {0}: {1}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1634
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:139
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:146
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1668
msgctxt "@info:title"
msgid "Error"
msgstr "Fehler"
@@ -243,8 +218,8 @@ msgstr "Wechseldatenträger auswerfen {0}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1624
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1724
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1658
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1758
msgctxt "@info:title"
msgid "Warning"
msgstr "Warnhinweis"
@@ -276,17 +251,17 @@ msgctxt "@action"
msgid "Connect via Network"
msgstr "Anschluss über Netzwerk"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:57
msgctxt "@action:button Preceded by 'Ready to'."
msgid "Print over network"
msgstr "Drucken über Netzwerk"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:58
msgctxt "@properties:tooltip"
msgid "Print over network"
msgstr "Drücken über Netzwerk"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:59
msgctxt "@info:status"
msgid "Connected over the network"
msgstr "Über Netzwerk verbunden"
@@ -301,12 +276,26 @@ msgctxt "@info:title"
msgid "Print error"
msgstr "Druckfehler"
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:21
+msgctxt "@info:title"
+msgid "New cloud printers found"
+msgstr "Neue Cloud-Drucker gefunden"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:22
+msgctxt "@info:message"
+msgid "New printers have been found connected to your account, you can find them in your list of discovered printers."
+msgstr "Es wurden neue Drucker gefunden, die Sie zu Ihrem Konto hinzufügen können. Sie finden diese in der Liste gefundener Drucker."
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:27
+msgctxt "@info:option_text"
+msgid "Do not show this message again"
+msgstr "Diese Meldung nicht mehr anzeigen"
+
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
msgid "You are attempting to connect to {0} but it is not the host of a group. You can visit the web page to configure it as a group host."
-msgstr "Sie versuchen, sich mit {0} zu verbinden, aber dieser Drucker ist nicht der Host, der die Gruppe verwaltet. Besuchen Sie die Website, um den Drucker als"
-" Host der Gruppe zu konfigurieren."
+msgstr "Sie versuchen, sich mit {0} zu verbinden, aber dieser Drucker ist nicht der Host, der die Gruppe verwaltet. Besuchen Sie die Website, um den Drucker als Host der Gruppe zu konfigurieren."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30
msgctxt "@info:title"
@@ -502,7 +491,7 @@ msgid "GIF Image"
msgstr "GIF-Bilddatei"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
-msgctxt "@item:inlistbox"
+msgctxt "@item:inlistbox 'Open' is part of the name of this file format."
msgid "Open Compressed Triangle Mesh"
msgstr "Öffnen Sie das komprimierte Dreiecksnetz"
@@ -595,12 +584,12 @@ msgctxt "@info:tooltip"
msgid "Configure Per Model Settings"
msgstr "Pro Objekteinstellungen konfigurieren"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:186
msgctxt "@title:tab"
msgid "Recommended"
msgstr "Empfohlen"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:188
msgctxt "@title:tab"
msgid "Custom"
msgstr "Benutzerdefiniert"
@@ -611,19 +600,19 @@ msgctxt "@item:inlistbox"
msgid "3MF File"
msgstr "3MF-Datei"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:198
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:651
msgctxt "@label"
msgid "Nozzle"
msgstr "Düse"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:496
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead."
msgstr "Projektdatei {0} enthält einen unbekannten Maschinentyp {1}. Importieren der Maschine ist nicht möglich. Stattdessen werden die Modelle importiert."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:499
msgctxt "@info:title"
msgid "Open Project File"
msgstr "Projektdatei öffnen"
@@ -703,16 +692,6 @@ msgctxt "@item:inlistbox"
msgid "Cura Profile"
msgstr "Cura-Profil"
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12
-msgctxt "@item:inmenu"
-msgid "Profile Assistant"
-msgstr "Profilassistent"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:18
-msgctxt "@item:inlistbox"
-msgid "Profile Assistant"
-msgstr "Profilassistent"
-
#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26
msgctxt "@item:inlistbox"
msgid "3MF file"
@@ -733,7 +712,6 @@ msgctxt "@item:inmenu"
msgid "Preview"
msgstr "Vorschau"
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:19
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18
msgctxt "@action"
msgid "Select upgrades"
@@ -749,134 +727,148 @@ msgctxt "@info:title"
msgid "Login failed"
msgstr "Login fehlgeschlagen"
-#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:36
msgctxt "@info:not supported profile"
msgid "Not supported"
msgstr "Nicht unterstützt"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:55
+msgctxt "@info:No intent profile selected"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:196
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:125
msgctxt "@title:window"
msgid "File Already Exists"
msgstr "Datei bereits vorhanden"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:197
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:126
#, python-brace-format
msgctxt "@label Don't translate the XML tag !"
msgid "The file {0} already exists. Are you sure you want to overwrite it?"
msgstr "Die Datei {0} ist bereits vorhanden. Soll die Datei wirklich überschrieben werden?"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:427
#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:430
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:433
msgctxt "@info:status"
msgid "Invalid file URL:"
msgstr "Ungültige Datei-URL:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:780
msgctxt "@info:message Followed by a list of settings."
msgid "Settings have been changed to match the current availability of extruders:"
msgstr "Die Einstellungen wurden an die aktuell verfügbaren Extruder angepasst:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:782
msgctxt "@info:title"
msgid "Settings updated"
msgstr "Einstellungen aktualisiert"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1334
msgctxt "@info:title"
msgid "Extruder(s) Disabled"
msgstr "Extruder deaktiviert"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1457
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:99
+#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+msgctxt "@label"
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Failed to export profile to {0}: {1}"
msgstr "Export des Profils nach {0} fehlgeschlagen: {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to export profile to {0}: Writer plugin reported failure."
msgstr "Export des Profils nach {0} fehlgeschlagen: Fehlermeldung von Writer-Plugin."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:149
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Exported profile to {0}"
msgstr "Profil wurde nach {0} exportiert"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150
msgctxt "@info:title"
msgid "Export succeeded"
msgstr "Export erfolgreich ausgeführt"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}: {1}"
msgstr "Import des Profils aus Datei {0}: {1} fehlgeschlagen"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:181
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Can't import profile from {0} before a printer is added."
msgstr "Import des Profils aus Datei {0} kann erst durchgeführt werden, wenn ein Drucker hinzugefügt wurde."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:198
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "No custom profile to import in file {0}"
msgstr "Kein benutzerdefiniertes Profil für das Importieren in Datei {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:202
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}:"
msgstr "Import des Profils aus Datei {0} fehlgeschlagen:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:226
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:236
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "This profile {0} contains incorrect data, could not import it."
msgstr "Dieses Profil {0} enthält falsche Daten, Importieren nicht möglich."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:325
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to import profile from {0}:"
msgstr "Import des Profils aus Datei {0} fehlgeschlagen:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:328
#, python-brace-format
msgctxt "@info:status"
msgid "Successfully imported profile {0}"
msgstr "Profil erfolgreich importiert {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:331
#, python-brace-format
msgctxt "@info:status"
msgid "File {0} does not contain any valid profile."
msgstr "Datei {0} enthält kein gültiges Profil."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:334
#, python-brace-format
msgctxt "@info:status"
msgid "Profile {0} has an unknown file type or is corrupted."
msgstr "Profil {0} hat einen unbekannten Dateityp oder ist beschädigt."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369
msgctxt "@label"
msgid "Custom profile"
msgstr "Benutzerdefiniertes Profil"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:385
msgctxt "@info:status"
msgid "Profile is missing a quality type."
msgstr "Für das Profil fehlt eine Qualitätsangabe."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:399
#, python-brace-format
msgctxt "@info:status"
msgid "Could not find a quality type {0} for the current configuration."
@@ -942,14 +934,13 @@ msgctxt "@tooltip"
msgid "Other"
msgstr "Sonstige"
-#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:306
+#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:302
#, python-brace-format
msgctxt "@label"
msgid "Pre-sliced file {0}"
msgstr "Vorgeschnittene Datei {0}"
#: /home/ruben/Projects/Cura/cura/UI/WelcomePagesModel.py:56
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:62
msgctxt "@action:button"
msgid "Next"
msgstr "Weiter"
@@ -963,9 +954,9 @@ msgstr "Gruppe #{group_nr}"
#: /home/ruben/Projects/Cura/cura/UI/WhatsNewPagesModel.py:17
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:133
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:169
msgctxt "@action:button"
msgid "Close"
msgstr "Schließen"
@@ -980,40 +971,86 @@ msgstr "Hinzufügen"
#: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:18
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:19
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:81
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:352
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:42
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:58
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:149
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:406
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:294
msgctxt "@action:button"
msgid "Cancel"
msgstr "Abbrechen"
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:36
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:320
+msgctxt "@label"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:39
+msgctxt "@label"
+msgid "Visual"
+msgstr "Visuell"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:40
+msgctxt "@text"
+msgid "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality."
+msgstr "Das visuelle Profil wurde für den Druck visueller Prototypen und Modellen entwickelt, bei denen das Ziel eine hohe visuelle Qualität und eine hohe Oberflächenqualität"
+" ist."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:43
+msgctxt "@label"
+msgid "Engineering"
+msgstr "Engineering"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:44
+msgctxt "@text"
+msgid "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances."
+msgstr "Das Engineering-Profil ist für den Druck von Funktionsprototypen und Endnutzungsteilen gedacht, bei denen Präzision gefragt ist und engere Toleranzen gelten."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:47
+msgctxt "@label"
+msgid "Draft"
+msgstr "Entwurf"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:48
+msgctxt "@text"
+msgid "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction."
+msgstr "Das Entwurfsprofil wurde für erste Prototypen und die Konzeptvalidierung entwickelt, um einen deutlich schnelleren Druck zu ermöglichen."
+
#: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208
msgctxt "@menuitem"
msgid "Not overridden"
msgstr "Nicht überschrieben"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:109
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:357
+msgctxt "@label"
+msgid "Custom profiles"
+msgstr "Benutzerdefinierte Profile"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:391
#, python-brace-format
msgctxt "@item:inlistbox"
msgid "All Supported Types ({0})"
msgstr "Alle unterstützten Typen ({0})"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:110
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:392
msgctxt "@item:inlistbox"
msgid "All Files (*)"
msgstr "Alle Dateien (*)"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:213
msgctxt "@label"
-msgid "Unknown"
-msgstr "Unbekannt"
+msgid "Custom Material"
+msgstr "Benutzerdefiniertes Material"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:214
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:205
+msgctxt "@label"
+msgid "Custom"
+msgstr "Benutzerdefiniert"
#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116
msgctxt "@label"
@@ -1025,17 +1062,6 @@ msgctxt "@label"
msgid "Available networked printers"
msgstr "Verfügbare vernetzte Drucker"
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689
-msgctxt "@label"
-msgid "Custom Material"
-msgstr "Benutzerdefiniertes Material"
-
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:690
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:203
-msgctxt "@label"
-msgid "Custom"
-msgstr "Benutzerdefiniert"
-
#: /home/ruben/Projects/Cura/cura/BuildVolume.py:90
msgctxt "@info:status"
msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models."
@@ -1071,11 +1097,6 @@ msgctxt "@info"
msgid "Unable to reach the Ultimaker account server."
msgstr "Der Ultimaker-Konto-Server konnte nicht erreicht werden."
-#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202
-msgctxt "@action:button"
-msgid "Retry"
-msgstr "Erneut versuchen"
-
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70
msgctxt "@message"
msgid "Please give the required permissions when authorizing this application."
@@ -1260,62 +1281,67 @@ msgctxt "@action:button"
msgid "Send report"
msgstr "Bericht senden"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:513
msgctxt "@info:progress"
msgid "Loading machines..."
msgstr "Geräte werden geladen..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:520
+msgctxt "@info:progress"
+msgid "Setting up preferences..."
+msgstr "Erstellungen werden eingerichtet ..."
+
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:824
msgctxt "@info:progress"
msgid "Setting up scene..."
msgstr "Die Szene wird eingerichtet..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:859
msgctxt "@info:progress"
msgid "Loading interface..."
msgstr "Die Benutzeroberfläche wird geladen..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1150
#, python-format
msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm."
msgid "%(width).1f x %(depth).1f x %(height).1f mm"
msgstr "%(width).1f x %(depth).1f x %(height).1f mm"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1657
#, python-brace-format
msgctxt "@info:status"
msgid "Only one G-code file can be loaded at a time. Skipped importing {0}"
msgstr "Es kann nur jeweils ein G-Code gleichzeitig geladen werden. Wichtige {0} werden übersprungen."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1667
#, python-brace-format
msgctxt "@info:status"
msgid "Can't open any other file if G-code is loading. Skipped importing {0}"
msgstr "Wenn G-Code geladen wird, kann keine weitere Datei geöffnet werden. Wichtige {0} werden übersprungen."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1757
msgctxt "@info:status"
msgid "The selected model was too small to load."
msgstr "Das gewählte Modell war zu klein zum Laden."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:56
msgctxt "@title:label"
msgid "Printer Settings"
msgstr "Druckereinstellungen"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70
msgctxt "@label"
msgid "X (Width)"
msgstr "X (Breite)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:76
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:90
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:104
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:206
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:225
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:244
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:74
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:88
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:102
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:203
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:223
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:243
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:265
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:285
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:79
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:93
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:109
@@ -1324,57 +1350,57 @@ msgctxt "@label"
msgid "mm"
msgstr "mm"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84
msgctxt "@label"
msgid "Y (Depth)"
msgstr "Y (Tiefe)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98
msgctxt "@label"
msgid "Z (Height)"
msgstr "Z (Höhe)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112
msgctxt "@label"
msgid "Build plate shape"
msgstr "Druckbettform"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125
msgctxt "@label"
msgid "Origin at center"
msgstr "Ausgang in Mitte"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137
msgctxt "@label"
msgid "Heated bed"
msgstr "Heizbares Bett"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149
msgctxt "@label"
msgid "Heated build volume"
msgstr "Druckraum aufgeheizt"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:161
msgctxt "@label"
msgid "G-code flavor"
msgstr "G-Code-Variante"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:185
msgctxt "@title:label"
msgid "Printhead Settings"
msgstr "Druckkopfeinstellungen"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:199
msgctxt "@label"
msgid "X min"
msgstr "X min."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:219
msgctxt "@label"
msgid "Y min"
msgstr "Y min."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:239
msgctxt "@label"
msgid "X max"
msgstr "X max."
@@ -1384,22 +1410,22 @@ msgctxt "@label"
msgid "Y max"
msgstr "Y max."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:281
msgctxt "@label"
msgid "Gantry Height"
msgstr "Brückenhöhe"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:295
msgctxt "@label"
msgid "Number of Extruders"
msgstr "Anzahl Extruder"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:355
msgctxt "@title:label"
msgid "Start G-code"
msgstr "Start G-Code"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:366
msgctxt "@title:label"
msgid "End G-code"
msgstr "Ende G-Code"
@@ -1478,7 +1504,7 @@ msgstr "Plugins"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:77
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:44
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:89
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417
msgctxt "@title:tab"
msgid "Materials"
@@ -1673,11 +1699,6 @@ msgctxt "@label:table_header"
msgid "Machine"
msgstr "Gerät"
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131
-msgctxt "@label:table_header"
-msgid "Print Core"
-msgstr "Print Core"
-
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137
msgctxt "@label:table_header"
msgid "Build Plate"
@@ -1933,9 +1954,9 @@ msgid "Edit"
msgstr "Bearbeiten"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:88
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:155
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:138
msgctxt "@action:button"
msgid "Remove"
msgstr "Entfernen"
@@ -1956,61 +1977,61 @@ msgctxt "@label"
msgid "Type"
msgstr "Typ"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:225
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274
msgctxt "@label"
msgid "Firmware version"
msgstr "Firmware-Version"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:239
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:290
msgctxt "@label"
msgid "Address"
msgstr "Adresse"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:263
msgctxt "@label"
msgid "This printer is not set up to host a group of printers."
msgstr "Dieser Drucker ist nicht eingerichtet um eine Gruppe von Druckern anzusteuern."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:267
msgctxt "@label"
msgid "This printer is the host for a group of %1 printers."
msgstr "Dieser Drucker steuert eine Gruppe von %1 Druckern an."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:278
msgctxt "@label"
msgid "The printer at this address has not yet responded."
msgstr "Der Drucker unter dieser Adresse hat nicht reagiert."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283
msgctxt "@action:button"
msgid "Connect"
msgstr "Verbinden"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:296
msgctxt "@title:window"
msgid "Invalid IP address"
msgstr "Ungültige IP-Adresse"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146
msgctxt "@text"
msgid "Please enter a valid IP address."
msgstr "Bitte eine gültige IP-Adresse eingeben."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:308
msgctxt "@title:window"
msgid "Printer Address"
msgstr "Druckeradresse"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:331
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102
msgctxt "@label"
msgid "Enter the IP address of your printer on the network."
msgstr "Geben Sie die IP-Adresse Ihres Druckers in das Netzwerk ein."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181
msgctxt "@action:button"
@@ -2065,17 +2086,17 @@ msgctxt "@label:status"
msgid "Finishes %1 at %2"
msgstr "Fertigstellung %1 auf %2"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44
-msgctxt "@action:button"
-msgid "Print"
-msgstr "Drucken"
-
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:11
msgctxt "@title:window"
msgid "Print over network"
msgstr "Drucken über Netzwerk"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:52
+msgctxt "@action:button"
+msgid "Print"
+msgstr "Drucken"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:80
msgctxt "@label"
msgid "Printer selection"
msgstr "Druckerauswahl"
@@ -2425,70 +2446,69 @@ msgctxt "@action:label"
msgid "Smoothing"
msgstr "Glättung"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37
-msgctxt "@label"
-msgid "Mesh Type"
-msgstr "Mesh-Typ"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68
-msgctxt "@label"
-msgid "Normal model"
-msgstr "Normales Modell"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75
-msgctxt "@label"
-msgid "Print as support"
-msgstr "Als Stützstruktur drucken"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83
-msgctxt "@label"
-msgid "Don't support overlap with other models"
-msgstr "Keine Überlappung mit anderen Modellen unterstützen"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91
-msgctxt "@label"
-msgid "Modify settings for overlap with other models"
-msgstr "Einstellungen für Überlappung mit anderen Modellen bearbeiten"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99
-msgctxt "@label"
-msgid "Modify settings for infill of other models"
-msgstr "Einstellungen für Füllung von anderen Modellen bearbeiten"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:346
-msgctxt "@action:button"
-msgid "Select settings"
-msgstr "Einstellungen wählen"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:388
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:13
msgctxt "@title:window"
msgid "Select Settings to Customize for this model"
msgstr "Einstellungen für die benutzerdefinierte Anpassung dieses Modells wählen"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:56
#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:94
msgctxt "@label:textbox"
msgid "Filter..."
msgstr "Filtern..."
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:70
msgctxt "@label:checkbox"
msgid "Show all"
msgstr "Alle anzeigen"
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:44
+msgctxt "@label"
+msgid "Mesh Type"
+msgstr "Mesh-Typ"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:85
+msgctxt "@label"
+msgid "Normal model"
+msgstr "Normales Modell"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:97
+msgctxt "@label"
+msgid "Print as support"
+msgstr "Als Stützstruktur drucken"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:109
+msgctxt "@label"
+msgid "Modify settings for overlaps"
+msgstr "Einstellungen für Überlappungen ändern"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:121
+msgctxt "@label"
+msgid "Don't support overlaps"
+msgstr "Überlappungen nicht unterstützen"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:145
+msgctxt "@action:checkbox"
+msgid "Infill only"
+msgstr "Nur Füllungen"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:368
+msgctxt "@action:button"
+msgid "Select settings"
+msgstr "Einstellungen wählen"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:14
msgctxt "@title:window"
msgid "Open Project"
msgstr "Projekt öffnen"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:58
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Update/override existing profile"
msgid "Update existing"
msgstr "Vorhandenes aktualisieren"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:59
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Save settings in a new profile"
msgid "Create new"
msgstr "Neu erstellen"
@@ -2515,6 +2535,11 @@ msgctxt "@action:ComboBox option"
msgid "Update"
msgstr "Aktualisierung"
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
+msgctxt "@action:ComboBox option"
+msgid "Create new"
+msgstr "Neu erstellen"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:106
msgctxt "@action:label"
@@ -2528,7 +2553,7 @@ msgid "Printer Group"
msgstr "Druckergruppe"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:220
msgctxt "@action:label"
msgid "Profile settings"
msgstr "Profileinstellungen"
@@ -2539,75 +2564,81 @@ msgid "How should the conflict in the profile be resolved?"
msgstr "Wie soll der Konflikt im Profil gelöst werden?"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:323
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:244
msgctxt "@action:label"
msgid "Name"
msgstr "Name"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261
+msgctxt "@action:label"
+msgid "Intent"
+msgstr "Intent"
+
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:246
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228
msgctxt "@action:label"
msgid "Not in profile"
msgstr "Nicht im Profil"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:251
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:233
msgctxt "@action:label"
msgid "%1 override"
msgid_plural "%1 overrides"
msgstr[0] "%1 überschreiben"
msgstr[1] "%1 überschreibt"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:247
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:262
msgctxt "@action:label"
msgid "Derivative from"
msgstr "Ableitung von"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:252
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:267
msgctxt "@action:label"
msgid "%1, %2 override"
msgid_plural "%1, %2 overrides"
msgstr[0] "%1, %2 überschreiben"
msgstr[1] "%1, %2 überschreibt"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:268
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:283
msgctxt "@action:label"
msgid "Material settings"
msgstr "Materialeinstellungen"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:284
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:299
msgctxt "@info:tooltip"
msgid "How should the conflict in the material be resolved?"
msgstr "Wie soll der Konflikt im Material gelöst werden?"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:342
msgctxt "@action:label"
msgid "Setting visibility"
msgstr "Sichtbarkeit einstellen"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:336
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:351
msgctxt "@action:label"
msgid "Mode"
msgstr "Modus"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:367
msgctxt "@action:label"
msgid "Visible settings:"
msgstr "Sichtbare Einstellungen:"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:372
msgctxt "@action:label"
msgid "%1 out of %2"
msgstr "%1 von %2"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:383
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:398
msgctxt "@action:warning"
msgid "Loading a project will clear all models on the build plate."
msgstr "Das Laden eines Projekts entfernt alle Modelle von der Druckplatte."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:401
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:416
msgctxt "@action:button"
msgid "Open"
msgstr "Öffnen"
@@ -2714,54 +2745,6 @@ msgctxt "@checkbox:description"
msgid "Automatically create a backup each day that Cura is started."
msgstr "An jedem Tag, an dem Cura gestartet wird, ein automatisches Backup erstellen."
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMainSettingsSelector.qml:75
-msgctxt "@label"
-msgid "Not supported"
-msgstr "Nicht unterstützt"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:35
-msgctxt "@action:button"
-msgid "Previous"
-msgstr "Zurück"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:174
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:159
-msgctxt "@action:button"
-msgid "Export"
-msgstr "Export"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209
-msgctxt "@label"
-msgid "Tip"
-msgstr "Tipp"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMaterialMenu.qml:20
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66
-msgctxt "@label:category menu label"
-msgid "Generic"
-msgstr "Generisch"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:160
-msgctxt "@label"
-msgid "Print experiment"
-msgstr "Druckexperiment"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:25
-msgctxt "@label"
-msgid "Checklist"
-msgstr "Checkliste"
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:30
-msgctxt "@label"
-msgid "Please select any upgrades made to this Ultimaker 2."
-msgstr "Wählen Sie bitte alle durchgeführten Upgrades für diesen Ultimaker 2."
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:44
-msgctxt "@label"
-msgid "Olsson Block"
-msgstr "Olsson-Block"
-
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:30
msgctxt "@title"
msgid "Build Plate Leveling"
@@ -2847,170 +2830,176 @@ msgctxt "@label"
msgid "Are you sure you want to abort the print?"
msgstr "Soll das Drucken wirklich abgebrochen werden?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:72
msgctxt "@title"
msgid "Information"
msgstr "Informationen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
msgctxt "@title:window"
msgid "Confirm Diameter Change"
msgstr "Änderung Durchmesser bestätigen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:102
msgctxt "@label (%1 is a number)"
msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?"
msgstr "Der neue Filament-Durchmesser wurde auf %1 mm eingestellt, was nicht kompatibel mit dem aktuellen Extruder ist. Möchten Sie fortfahren?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:128
msgctxt "@label"
msgid "Display Name"
msgstr "Namen anzeigen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:138
msgctxt "@label"
msgid "Brand"
msgstr "Marke"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:148
msgctxt "@label"
msgid "Material Type"
msgstr "Materialtyp"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:158
msgctxt "@label"
msgid "Color"
msgstr "Farbe"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:208
msgctxt "@label"
msgid "Properties"
msgstr "Eigenschaften"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:210
msgctxt "@label"
msgid "Density"
msgstr "Dichte"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:225
msgctxt "@label"
msgid "Diameter"
msgstr "Durchmesser"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:259
msgctxt "@label"
msgid "Filament Cost"
msgstr "Filamentkosten"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:276
msgctxt "@label"
msgid "Filament weight"
msgstr "Filamentgewicht"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:294
msgctxt "@label"
msgid "Filament length"
msgstr "Filamentlänge"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:303
msgctxt "@label"
msgid "Cost per Meter"
msgstr "Kosten pro Meter"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:317
msgctxt "@label"
msgid "This material is linked to %1 and shares some of its properties."
msgstr "Dieses Material ist mit %1 verknüpft und teilt sich damit einige seiner Eigenschaften."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:324
msgctxt "@label"
msgid "Unlink Material"
msgstr "Material trennen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:335
msgctxt "@label"
msgid "Description"
msgstr "Beschreibung"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:348
msgctxt "@label"
msgid "Adhesion Information"
msgstr "Haftungsinformationen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:374
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19
msgctxt "@label"
msgid "Print settings"
msgstr "Druckeinstellungen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:108
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:84
msgctxt "@action:button"
msgid "Activate"
msgstr "Aktivieren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:126
msgctxt "@action:button"
msgid "Create"
msgstr "Erstellen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:140
msgctxt "@action:button"
msgid "Duplicate"
msgstr "Duplizieren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:170
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:167
msgctxt "@action:button"
msgid "Import"
msgstr "Import"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:184
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:179
+msgctxt "@action:button"
+msgid "Export"
+msgstr "Export"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:233
msgctxt "@action:label"
msgid "Printer"
msgstr "Drucker"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:297
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:274
msgctxt "@title:window"
msgid "Confirm Remove"
msgstr "Entfernen bestätigen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:275
msgctxt "@label (%1 is object name)"
msgid "Are you sure you wish to remove %1? This cannot be undone!"
msgstr "Möchten Sie %1 wirklich entfernen? Dies kann nicht rückgängig gemacht werden!"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:322
msgctxt "@title:window"
msgid "Import Material"
msgstr "Material importieren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:323
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Could not import material %1: %2"
msgstr "Material konnte nicht importiert werden %1: %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:327
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully imported material %1"
msgstr "Material wurde erfolgreich importiert %1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
msgctxt "@title:window"
msgid "Export Material"
msgstr "Material exportieren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:357
msgctxt "@info:status Don't translate the XML tags and !"
msgid "Failed to export material to %1: %2"
msgstr "Exportieren des Materials nach %1: %2 schlug fehl"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:363
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully exported material to %1"
msgstr "Material erfolgreich nach %1 exportiert"
@@ -3025,27 +3014,27 @@ msgctxt "@label:textbox"
msgid "Check all"
msgstr "Alle prüfen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:48
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
msgctxt "@info:status"
msgid "Calculated"
msgstr "Berechnet"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
msgctxt "@title:column"
msgid "Setting"
msgstr "Einstellung"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:68
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:82
msgctxt "@title:column"
msgid "Profile"
msgstr "Profil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:89
msgctxt "@title:column"
msgid "Current"
msgstr "Aktuell"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:83
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:97
msgctxt "@title:column"
msgid "Unit"
msgstr "Einheit"
@@ -3056,307 +3045,301 @@ msgctxt "@title:tab"
msgid "General"
msgstr "Allgemein"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:132
msgctxt "@label"
msgid "Interface"
msgstr "Schnittstelle"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:143
msgctxt "@label"
msgid "Language:"
msgstr "Sprache:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:210
msgctxt "@label"
msgid "Currency:"
msgstr "Währung:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:223
msgctxt "@label"
msgid "Theme:"
msgstr "Thema:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:279
msgctxt "@label"
msgid "You will need to restart the application for these changes to have effect."
msgstr "Die Anwendung muss neu gestartet werden, um die Änderungen zu übernehmen."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:296
msgctxt "@info:tooltip"
msgid "Slice automatically when changing settings."
msgstr "Bei Änderung der Einstellungen automatisch schneiden."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:304
msgctxt "@option:check"
msgid "Slice automatically"
msgstr "Automatisch schneiden"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:318
msgctxt "@label"
msgid "Viewport behavior"
msgstr "Viewport-Verhalten"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:326
msgctxt "@info:tooltip"
msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly."
msgstr "Nicht gestützte Bereiche des Modells in rot hervorheben. Ohne Support werden diese Bereiche nicht korrekt gedruckt."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:335
msgctxt "@option:check"
msgid "Display overhang"
msgstr "Überhang anzeigen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:343
msgctxt "@info:tooltip"
msgid "Moves the camera so the model is in the center of the view when a model is selected"
msgstr "Bewegt die Kamera, bis sich das Modell im Mittelpunkt der Ansicht befindet, wenn ein Modell ausgewählt wurde"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348
msgctxt "@action:button"
msgid "Center camera when item is selected"
msgstr "Zentrieren Sie die Kamera, wenn das Element ausgewählt wurde"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:358
msgctxt "@info:tooltip"
msgid "Should the default zoom behavior of cura be inverted?"
msgstr "Soll das standardmäßige Zoom-Verhalten von Cura umgekehrt werden?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:363
msgctxt "@action:button"
msgid "Invert the direction of camera zoom."
msgstr "Kehren Sie die Richtung des Kamera-Zooms um."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Should zooming move in the direction of the mouse?"
msgstr "Soll das Zoomen in Richtung der Maus erfolgen?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Zooming towards the mouse is not supported in the orthographic perspective."
msgstr "Das Zoomen in Richtung der Maus wird in der orthografischen Perspektive nicht unterstützt."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384
msgctxt "@action:button"
msgid "Zoom toward mouse direction"
msgstr "In Mausrichtung zoomen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:410
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved so that they no longer intersect?"
msgstr "Sollen Modelle auf der Plattform so verschoben werden, dass sie sich nicht länger überschneiden?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415
msgctxt "@option:check"
msgid "Ensure models are kept apart"
msgstr "Stellen Sie sicher, dass die Modelle getrennt gehalten werden"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:424
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved down to touch the build plate?"
msgstr "Sollen Modelle auf der Plattform so nach unten verschoben werden, dass sie die Druckplatte berühren?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:429
msgctxt "@option:check"
msgid "Automatically drop models to the build plate"
msgstr "Setzt Modelle automatisch auf der Druckplatte ab"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441
msgctxt "@info:tooltip"
msgid "Show caution message in g-code reader."
msgstr "Warnmeldung im G-Code-Reader anzeigen."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
msgctxt "@option:check"
msgid "Caution message in g-code reader"
msgstr "Warnmeldung in G-Code-Reader"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:458
msgctxt "@info:tooltip"
msgid "Should layer be forced into compatibility mode?"
msgstr "Soll die Schicht in den Kompatibilitätsmodus gezwungen werden?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:463
msgctxt "@option:check"
msgid "Force layer view compatibility mode (restart required)"
msgstr "Schichtenansicht Kompatibilitätsmodus erzwingen (Neustart erforderlich)"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:473
+msgctxt "@info:tooltip"
+msgid "Should Cura open at the location it was closed?"
+msgstr "Sollte Cura sich an der Stelle öffnen, an der das Programm geschlossen wurde?"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:478
+msgctxt "@option:check"
+msgid "Restore window position on start"
+msgstr "Fensterposition beim Start wiederherstellen"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:488
msgctxt "@info:tooltip"
msgid "What type of camera rendering should be used?"
msgstr "Welches Kamera-Rendering sollte verwendet werden?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495
msgctxt "@window:text"
-msgid "Camera rendering: "
-msgstr "Kamera-Rendering: "
+msgid "Camera rendering:"
+msgstr "Kamera-Rendering:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506
msgid "Perspective"
msgstr "Ansicht"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507
msgid "Orthographic"
msgstr "Orthogonal"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538
msgctxt "@label"
msgid "Opening and saving files"
msgstr "Dateien öffnen und speichern"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:545
msgctxt "@info:tooltip"
msgid "Should models be scaled to the build volume if they are too large?"
msgstr "Sollen Modelle an das Erstellungsvolumen angepasst werden, wenn sie zu groß sind?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:550
msgctxt "@option:check"
msgid "Scale large models"
msgstr "Große Modelle anpassen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:560
msgctxt "@info:tooltip"
msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?"
msgstr "Ein Modell kann extrem klein erscheinen, wenn seine Maßeinheit z. B. in Metern anstelle von Millimetern angegeben ist. Sollen diese Modelle hoch skaliert werden?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:565
msgctxt "@option:check"
msgid "Scale extremely small models"
msgstr "Extrem kleine Modelle skalieren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575
msgctxt "@info:tooltip"
msgid "Should models be selected after they are loaded?"
msgstr "Sollten Modelle gewählt werden, nachdem sie geladen wurden?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:580
msgctxt "@option:check"
msgid "Select models when loaded"
msgstr "Modelle wählen, nachdem sie geladen wurden"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590
msgctxt "@info:tooltip"
msgid "Should a prefix based on the printer name be added to the print job name automatically?"
msgstr "Soll ein Präfix anhand des Druckernamens automatisch zum Namen des Druckauftrags hinzugefügt werden?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:595
msgctxt "@option:check"
msgid "Add machine prefix to job name"
msgstr "Geräte-Präfix zu Auftragsnamen hinzufügen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:605
msgctxt "@info:tooltip"
msgid "Should a summary be shown when saving a project file?"
msgstr "Soll beim Speichern einer Projektdatei eine Zusammenfassung angezeigt werden?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609
msgctxt "@option:check"
msgid "Show summary dialog when saving project"
msgstr "Dialog Zusammenfassung beim Speichern eines Projekts anzeigen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
msgctxt "@info:tooltip"
msgid "Default behavior when opening a project file"
msgstr "Standardverhalten beim Öffnen einer Projektdatei"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:627
msgctxt "@window:text"
msgid "Default behavior when opening a project file: "
msgstr "Standardverhalten beim Öffnen einer Projektdatei: "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641
msgctxt "@option:openProject"
msgid "Always ask me this"
msgstr "Stets nachfragen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:642
msgctxt "@option:openProject"
msgid "Always open as a project"
msgstr "Immer als Projekt öffnen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:643
msgctxt "@option:openProject"
msgid "Always import models"
msgstr "Modelle immer importieren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:679
msgctxt "@info:tooltip"
msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again."
msgstr "Wenn Sie Änderungen für ein Profil vorgenommen haben und zu einem anderen Profil gewechselt sind, wird ein Dialog angezeigt, der hinterfragt, ob Sie Ihre Änderungen beibehalten möchten oder nicht; optional können Sie ein Standardverhalten wählen, sodass dieser Dialog nicht erneut angezeigt wird."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:52
msgctxt "@label"
msgid "Profiles"
msgstr "Profile"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:693
msgctxt "@window:text"
msgid "Default behavior for changed setting values when switching to a different profile: "
msgstr "Standardverhalten für geänderte Einstellungswerte beim Wechsel zu einem anderen Profil: "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:707
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157
msgctxt "@option:discardOrKeep"
msgid "Always ask me this"
msgstr "Stets nachfragen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708
msgctxt "@option:discardOrKeep"
msgid "Always discard changed settings"
msgstr "Geänderte Einstellungen immer verwerfen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:709
msgctxt "@option:discardOrKeep"
msgid "Always transfer changed settings to new profile"
msgstr "Geänderte Einstellungen immer auf neues Profil übertragen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743
msgctxt "@label"
msgid "Privacy"
msgstr "Privatsphäre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:750
msgctxt "@info:tooltip"
msgid "Should Cura check for updates when the program is started?"
msgstr "Soll Cura bei Programmstart nach Updates suchen?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:755
msgctxt "@option:check"
msgid "Check for updates on start"
msgstr "Bei Start nach Updates suchen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:765
msgctxt "@info:tooltip"
msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored."
msgstr "Sollen anonyme Daten über Ihren Druck an Ultimaker gesendet werden? Beachten Sie, dass keine Modelle, IP-Adressen oder andere personenbezogene Daten gesendet oder gespeichert werden."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:770
msgctxt "@option:check"
msgid "Send (anonymous) print information"
msgstr "(Anonyme) Druckinformationen senden"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:779
msgctxt "@action:button"
msgid "More information"
msgstr "Mehr Informationen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:774
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:27
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ProfileMenu.qml:23
-msgctxt "@label"
-msgid "Experimental"
-msgstr "Experimentell"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781
-msgctxt "@info:tooltip"
-msgid "Use multi build plate functionality"
-msgstr "Mehrfach-Druckplattenfunktion verwenden"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786
-msgctxt "@option:check"
-msgid "Use multi build plate functionality (restart required)"
-msgstr "Mehrfach-Druckplattenfunktion verwenden (Neustart erforderlich)"
-
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415
msgctxt "@title:tab"
@@ -3364,93 +3347,84 @@ msgid "Printers"
msgstr "Drucker"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152
msgctxt "@action:button"
msgid "Rename"
msgstr "Umbenennen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:34
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419
msgctxt "@title:tab"
msgid "Profiles"
msgstr "Profile"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:104
msgctxt "@label"
msgid "Create"
msgstr "Erstellen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
msgctxt "@label"
msgid "Duplicate"
msgstr "Duplizieren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:202
msgctxt "@title:window"
msgid "Create Profile"
msgstr "Profil erstellen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:204
msgctxt "@info"
msgid "Please provide a name for this profile."
msgstr "Geben Sie bitte einen Namen für dieses Profil an."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:260
msgctxt "@title:window"
msgid "Duplicate Profile"
msgstr "Profil duplizieren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:291
msgctxt "@title:window"
msgid "Rename Profile"
msgstr "Profil umbenennen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:304
msgctxt "@title:window"
msgid "Import Profile"
msgstr "Profil importieren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:333
msgctxt "@title:window"
msgid "Export Profile"
msgstr "Profil exportieren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:396
msgctxt "@label %1 is printer name"
msgid "Printer: %1"
msgstr "Drucker: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Default profiles"
-msgstr "Standardprofile"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Custom profiles"
-msgstr "Benutzerdefinierte Profile"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:554
msgctxt "@action:button"
msgid "Update profile with current settings/overrides"
msgstr "Profil mit aktuellen Einstellungen/Überschreibungen aktualisieren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:561
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:257
msgctxt "@action:button"
msgid "Discard current changes"
msgstr "Aktuelle Änderungen verwerfen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:580
msgctxt "@action:label"
msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below."
msgstr "Dieses Profil verwendet die vom Drucker festgelegten Standardeinstellungen, deshalb sind in der folgenden Liste keine Einstellungen/Überschreibungen enthalten."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:588
msgctxt "@action:label"
msgid "Your current settings match the selected profile."
msgstr "Ihre aktuellen Einstellungen stimmen mit dem gewählten Profil überein."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:606
msgctxt "@title:tab"
msgid "Global Settings"
msgstr "Globale Einstellungen"
@@ -3515,35 +3489,35 @@ msgstr "Unbenannt"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:68
msgctxt "@label:textbox"
-msgid "search settings"
+msgid "Search settings"
msgstr "Einstellungen durchsuchen"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:462
msgctxt "@action:menu"
msgid "Copy value to all extruders"
msgstr "Werte für alle Extruder kopieren"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:471
msgctxt "@action:menu"
msgid "Copy all changed values to all extruders"
msgstr "Alle geänderten Werte für alle Extruder kopieren"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:508
msgctxt "@action:menu"
msgid "Hide this setting"
msgstr "Diese Einstellung ausblenden"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:521
msgctxt "@action:menu"
msgid "Don't show this setting"
msgstr "Diese Einstellung ausblenden"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
msgctxt "@action:menu"
msgid "Keep this setting visible"
msgstr "Diese Einstellung weiterhin anzeigen"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434
msgctxt "@action:menu"
msgid "Configure setting visibility..."
@@ -3575,17 +3549,17 @@ msgctxt "@label Header for list of settings."
msgid "Affected By"
msgstr "Wird beeinflusst von"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:187
msgctxt "@label"
msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders."
msgstr "Diese Einstellung wird stets zwischen allen Extrudern geteilt. Eine Änderung ändert den Wert für alle Extruder."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:191
msgctxt "@label"
msgid "The value is resolved from per-extruder values "
msgstr "Der Wert wird von Pro-Extruder-Werten gelöst "
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:230
msgctxt "@label"
msgid ""
"This setting has a value that is different from the profile.\n"
@@ -3596,7 +3570,7 @@ msgstr ""
"\n"
"Klicken Sie, um den Wert des Profils wiederherzustellen."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:329
msgctxt "@label"
msgid ""
"This setting is normally calculated, but it currently has an absolute value set.\n"
@@ -3607,6 +3581,13 @@ msgstr ""
"\n"
"Klicken Sie, um den berechneten Wert wiederherzustellen."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/NoIntentIcon.qml:31
+msgctxt "@label %1 is filled in with the type of a profile. %2 is filled with a list of numbers (eg '1' or '1, 2')"
+msgid "There is no %1 profile for the configuration in extruder %2. The default intent will be used instead"
+msgid_plural "There is no %1 profile for the configurations in extruders %2. The default intent will be used instead"
+msgstr[0] ""
+msgstr[1] ""
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:144
msgctxt "@button"
msgid "Recommended"
@@ -3647,26 +3628,11 @@ msgctxt "@label"
msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards."
msgstr "Drucken eines Brim- oder Raft-Elements aktivieren. Es wird ein flacher Bereich rund um oder unter Ihrem Objekt hinzugefügt, das im Anschluss leicht abgeschnitten werden kann."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:175
-msgctxt "@label"
-msgid "Layer Height"
-msgstr "Schichtdicke"
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:206
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:81
msgctxt "@tooltip"
msgid "You have modified some profile settings. If you want to change these go to custom mode."
msgstr "Sie haben einige Profileinstellungen geändert. Wenn Sie diese ändern möchten, wechseln Sie in den Modus „Benutzerdefiniert“."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:355
-msgctxt "@tooltip"
-msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
-msgstr "Dieses Qualitätsprofil ist für Ihr aktuelles Material und Ihre derzeitige Düsenkonfiguration nicht verfügbar. Bitte ändern Sie diese, um das Qualitätsprofil zu aktivieren."
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449
-msgctxt "@tooltip"
-msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
-msgstr "Ein benutzerdefiniertes Profil ist derzeit aktiv. Wählen Sie ein voreingestelltes Qualitätsprofil aus der Registerkarte „Benutzerdefiniert“, um den Schieberegler für Qualität zu aktivieren"
-
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:13
msgctxt "@label:Should be short"
msgid "On"
@@ -3677,12 +3643,17 @@ msgctxt "@label:Should be short"
msgid "Off"
msgstr "Aus"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:27
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:33
+msgctxt "@label"
+msgid "Experimental"
+msgstr "Experimentell"
+
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:47
msgctxt "@label"
msgid "Profile"
msgstr "Profil"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:94
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:172
msgctxt "@tooltip"
msgid ""
"Some setting/override values are different from the values stored in the profile.\n"
@@ -3693,6 +3664,11 @@ msgstr ""
"\n"
"Klicken Sie, um den Profilmanager zu öffnen."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:160
+msgctxt "@label:header"
+msgid "Custom profiles"
+msgstr "Benutzerdefinierte Profile"
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:21
msgctxt "@label shown when we load a Gcode file"
msgid "Print setup disabled. G-code file can not be modified."
@@ -3820,11 +3796,16 @@ msgctxt "@label:category menu label"
msgid "Material"
msgstr "Material"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:42
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:46
msgctxt "@label:category menu label"
msgid "Favorites"
msgstr "Favoriten"
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:71
+msgctxt "@label:category menu label"
+msgid "Generic"
+msgstr "Generisch"
+
#: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25
msgctxt "@label:category menu label"
msgid "Network enabled printers"
@@ -3860,16 +3841,6 @@ msgctxt "@action:inmenu"
msgid "Disable Extruder"
msgstr "Extruder deaktivieren"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63
-msgctxt "@title:menu"
-msgid "&Build plate"
-msgstr "&Druckplatte"
-
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66
-msgctxt "@title:settings"
-msgid "&Profile"
-msgstr "&Profil"
-
#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:19
msgctxt "@action:inmenu menubar:view"
msgid "&Camera position"
@@ -3949,12 +3920,12 @@ msgctxt "@header"
msgid "Configurations"
msgstr "Konfigurationen"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:110
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:112
msgctxt "@label"
msgid "Select configuration"
msgstr "Konfiguration wählen"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:223
msgctxt "@label"
msgid "Configurations"
msgstr "Konfigurationen"
@@ -3984,12 +3955,12 @@ msgctxt "@label"
msgid "Enabled"
msgstr "Aktiviert"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:251
msgctxt "@label"
msgid "Material"
msgstr "Material"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:375
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:378
msgctxt "@label"
msgid "Use glue for better adhesion with this material combination."
msgstr "Für diese Materialkombination Kleber für eine bessere Haftung verwenden."
@@ -4406,44 +4377,44 @@ msgctxt "@title:tab"
msgid "Settings"
msgstr "Einstellungen"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538
msgctxt "@title:window"
msgid "Closing Cura"
msgstr "Cura wird geschlossen"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551
msgctxt "@label"
msgid "Are you sure you want to exit Cura?"
msgstr "Möchten Sie Cura wirklich beenden?"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:589
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19
msgctxt "@title:window"
msgid "Open file(s)"
msgstr "Datei(en) öffnen"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:695
msgctxt "@window:title"
msgid "Install Package"
msgstr "Paket installieren"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:703
msgctxt "@title:window"
msgid "Open File(s)"
msgstr "Datei(en) öffnen"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:706
msgctxt "@text:window"
msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one."
msgstr "Es wurden eine oder mehrere G-Code-Datei(en) innerhalb der von Ihnen gewählten Dateien gefunden. Sie können nur eine G-Code-Datei auf einmal öffnen. Wenn Sie eine G-Code-Datei öffnen möchten wählen Sie bitte nur eine Datei."
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:809
msgctxt "@title:window"
msgid "Add Printer"
msgstr "Drucker hinzufügen"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:817
msgctxt "@title:window"
msgid "What's New"
msgstr "Neuheiten"
@@ -4514,17 +4485,17 @@ msgctxt "@title:window"
msgid "About Cura"
msgstr "Über Cura"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:56
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:57
msgctxt "@label"
msgid "version: %1"
msgstr "Version: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:72
msgctxt "@label"
msgid "End-to-end solution for fused filament 3D printing."
msgstr "Komplettlösung für den 3D-Druck mit geschmolzenem Filament."
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:84
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:85
msgctxt "@info:credit"
msgid ""
"Cura is developed by Ultimaker B.V. in cooperation with the community.\n"
@@ -4533,122 +4504,122 @@ msgstr ""
"Cura wurde von Ultimaker B.V. in Zusammenarbeit mit der Community entwickelt.\n"
"Cura verwendet mit Stolz die folgenden Open Source-Projekte:"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
msgctxt "@label"
msgid "Graphical user interface"
msgstr "Grafische Benutzerschnittstelle"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
msgctxt "@label"
msgid "Application framework"
msgstr "Anwendungsrahmenwerk"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
msgctxt "@label"
msgid "G-code generator"
msgstr "G-Code-Generator"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:138
msgctxt "@label"
msgid "Interprocess communication library"
msgstr "Bibliothek Interprozess-Kommunikation"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:139
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
msgctxt "@label"
msgid "Programming language"
msgstr "Programmiersprache"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
msgctxt "@label"
msgid "GUI framework"
msgstr "GUI-Rahmenwerk"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
msgctxt "@label"
msgid "GUI framework bindings"
msgstr "GUI-Rahmenwerk Einbindungen"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
msgctxt "@label"
msgid "C/C++ Binding library"
msgstr "C/C++ Einbindungsbibliothek"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
msgctxt "@label"
msgid "Data interchange format"
msgstr "Format Datenaustausch"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
msgctxt "@label"
msgid "Support library for scientific computing"
msgstr "Support-Bibliothek für wissenschaftliche Berechnung"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
msgctxt "@label"
msgid "Support library for faster math"
msgstr "Support-Bibliothek für schnelleres Rechnen"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
msgctxt "@label"
msgid "Support library for handling STL files"
msgstr "Support-Bibliothek für die Handhabung von STL-Dateien"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
msgctxt "@label"
msgid "Support library for handling planar objects"
msgstr "Support-Bibliothek für die Handhabung von ebenen Objekten"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
msgctxt "@label"
msgid "Support library for handling triangular meshes"
msgstr "Support-Bibliothek für die Handhabung von dreieckigen Netzen"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
msgctxt "@label"
msgid "Support library for analysis of complex networks"
msgstr "Support-Bibliothek für die Analyse von komplexen Netzwerken"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
msgctxt "@label"
msgid "Support library for handling 3MF files"
msgstr "Support-Bibliothek für die Handhabung von 3MF-Dateien"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
msgctxt "@label"
msgid "Support library for file metadata and streaming"
msgstr "Support-Bibliothek für Datei-Metadaten und Streaming"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
msgctxt "@label"
msgid "Serial communication library"
msgstr "Bibliothek für serielle Kommunikation"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
msgctxt "@label"
msgid "ZeroConf discovery library"
msgstr "Bibliothek für ZeroConf-Erkennung"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
msgctxt "@label"
msgid "Polygon clipping library"
msgstr "Bibliothek für Polygon-Beschneidung"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:156
msgctxt "@Label"
msgid "Python HTTP library"
msgstr "Bibliothek für Python HTTP"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:157
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
msgctxt "@label"
msgid "Font"
msgstr "Schriftart"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
msgctxt "@label"
msgid "SVG icons"
msgstr "SVG-Symbole"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:160
msgctxt "@label"
msgid "Linux cross-distribution application deployment"
msgstr "Distributionsunabhängiges Format für Linux-Anwendungen"
@@ -4668,32 +4639,27 @@ msgctxt "@title:window"
msgid "Save Project"
msgstr "Projekt speichern"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149
-msgctxt "@action:label"
-msgid "Build plate"
-msgstr "Druckplatte"
-
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:177
msgctxt "@action:label"
msgid "Extruder %1"
msgstr "Extruder %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:192
msgctxt "@action:label"
msgid "%1 & material"
msgstr "%1 & Material"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:194
msgctxt "@action:label"
msgid "Material"
msgstr "Material"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
msgctxt "@action:label"
msgid "Don't show project summary on save again"
msgstr "Projektzusammenfassung beim Speichern nicht erneut anzeigen"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:302
msgctxt "@action:button"
msgid "Save"
msgstr "Speichern"
@@ -4869,12 +4835,12 @@ msgctxt "@label"
msgid "Troubleshooting"
msgstr "Störungen beheben"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:211
msgctxt "@label"
msgid "Printer name"
msgstr "Druckername"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:224
msgctxt "@text"
msgid "Please give your printer a name"
msgstr "Weisen Sie Ihrem Drucker bitte einen Namen zu"
@@ -4933,6 +4899,31 @@ msgctxt "@button"
msgid "Get started"
msgstr "Erste Schritte"
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:27
+msgctxt "@info:tooltip"
+msgid "3D View"
+msgstr "3D-Ansicht"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:40
+msgctxt "@info:tooltip"
+msgid "Front View"
+msgstr "Vorderansicht"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:53
+msgctxt "@info:tooltip"
+msgid "Top View"
+msgstr "Draufsicht"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:66
+msgctxt "@info:tooltip"
+msgid "Left View"
+msgstr "Ansicht von links"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:79
+msgctxt "@info:tooltip"
+msgid "Right View"
+msgstr "Ansicht von rechts"
+
#: MachineSettingsAction/plugin.json
msgctxt "description"
msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)."
@@ -4993,16 +4984,6 @@ msgctxt "name"
msgid "Model Checker"
msgstr "Modell-Prüfer"
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "description"
-msgid "Dump the contents of all settings to a HTML file."
-msgstr "Die Inhalte aller Einstellungen in eine HTML-Datei ausgeben."
-
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "name"
-msgid "God Mode"
-msgstr "Gott-Modus"
-
#: FirmwareUpdater/plugin.json
msgctxt "description"
msgid "Provides a machine actions for updating firmware."
@@ -5013,16 +4994,6 @@ msgctxt "name"
msgid "Firmware Updater"
msgstr "Firmware-Aktualisierungsfunktion"
-#: ProfileFlattener/plugin.json
-msgctxt "description"
-msgid "Create a flattened quality changes profile."
-msgstr "Erstellt eine geglättete Qualität, verändert das Profil."
-
-#: ProfileFlattener/plugin.json
-msgctxt "name"
-msgid "Profile Flattener"
-msgstr "Profilglättfunktion"
-
#: AMFReader/plugin.json
msgctxt "description"
msgid "Provides support for reading AMF files."
@@ -5223,6 +5194,16 @@ msgctxt "name"
msgid "Version Upgrade 3.3 to 3.4"
msgstr "Upgrade von Version 3.3 auf 3.4"
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "description"
+msgid "Upgrades configurations from Cura 4.3 to Cura 4.4."
+msgstr "Aktualisiert Konfigurationen von Cura 4.3 auf Cura 4.4."
+
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "name"
+msgid "Version Upgrade 4.3 to 4.4"
+msgstr "Upgrade von Version 4.3 auf 4.4"
+
#: VersionUpgrade/VersionUpgrade25to26/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 2.5 to Cura 2.6."
@@ -5423,16 +5404,6 @@ msgctxt "name"
msgid "Cura Profile Writer"
msgstr "Cura-Profil-Writer"
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "description"
-msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
-msgstr "Ermöglichen Sie Materialherstellern die Erstellung neuer Material- und Qualitätsprofile, indem Sie eine Drop-In-Benutzerschnittstelle verwenden."
-
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "name"
-msgid "Print Profile Assistant"
-msgstr "Druckprofil-Assistent"
-
#: 3MFWriter/plugin.json
msgctxt "description"
msgid "Provides support for writing 3MF files."
@@ -5473,6 +5444,158 @@ msgctxt "name"
msgid "Cura Profile Reader"
msgstr "Cura-Profil-Reader"
+#~ msgctxt "@item:inmenu"
+#~ msgid "Flatten active settings"
+#~ msgstr "Einstellungen Glätten aktiv"
+
+#~ msgctxt "@info:status"
+#~ msgid "Profile has been flattened & activated."
+#~ msgstr "Das Profil wurde geglättet und aktiviert."
+
+#~ msgctxt "X3g Writer Plugin Description"
+#~ msgid "Writes X3g to files"
+#~ msgstr "Schreibt X3g in Dateien"
+
+#~ msgctxt "X3g Writer File Description"
+#~ msgid "X3g File"
+#~ msgstr "X3g-Datei"
+
+#~ msgctxt "X3G Writer File Description"
+#~ msgid "X3G File"
+#~ msgstr "X3G-Datei"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Open Compressed Triangle Mesh"
+#~ msgstr "Öffnen Sie das komprimierte Dreiecksnetz"
+
+#~ msgctxt "@item:inmenu"
+#~ msgid "Profile Assistant"
+#~ msgstr "Profilassistent"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Profile Assistant"
+#~ msgstr "Profilassistent"
+
+#~ msgctxt "@action:button"
+#~ msgid "Retry"
+#~ msgstr "Erneut versuchen"
+
+#~ msgctxt "@label:table_header"
+#~ msgid "Print Core"
+#~ msgstr "Print Core"
+
+#~ msgctxt "@label"
+#~ msgid "Don't support overlap with other models"
+#~ msgstr "Keine Überlappung mit anderen Modellen unterstützen"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for overlap with other models"
+#~ msgstr "Einstellungen für Überlappung mit anderen Modellen bearbeiten"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for infill of other models"
+#~ msgstr "Einstellungen für Füllung von anderen Modellen bearbeiten"
+
+#~ msgctxt "@action:ComboBox option"
+#~ msgid "Update existing"
+#~ msgstr "Vorhandenes aktualisieren"
+
+#~ msgctxt "@label"
+#~ msgid "Not supported"
+#~ msgstr "Nicht unterstützt"
+
+#~ msgctxt "@action:button"
+#~ msgid "Previous"
+#~ msgstr "Zurück"
+
+#~ msgctxt "@label"
+#~ msgid "Tip"
+#~ msgstr "Tipp"
+
+#~ msgctxt "@label"
+#~ msgid "Print experiment"
+#~ msgstr "Druckexperiment"
+
+#~ msgctxt "@label"
+#~ msgid "Checklist"
+#~ msgstr "Checkliste"
+
+#~ msgctxt "@label"
+#~ msgid "Please select any upgrades made to this Ultimaker 2."
+#~ msgstr "Wählen Sie bitte alle durchgeführten Upgrades für diesen Ultimaker 2."
+
+#~ msgctxt "@label"
+#~ msgid "Olsson Block"
+#~ msgstr "Olsson-Block"
+
+#~ msgctxt "@window:text"
+#~ msgid "Camera rendering: "
+#~ msgstr "Kamera-Rendering: "
+
+#~ msgctxt "@info:tooltip"
+#~ msgid "Use multi build plate functionality"
+#~ msgstr "Mehrfach-Druckplattenfunktion verwenden"
+
+#~ msgctxt "@option:check"
+#~ msgid "Use multi build plate functionality (restart required)"
+#~ msgstr "Mehrfach-Druckplattenfunktion verwenden (Neustart erforderlich)"
+
+#~ msgctxt "@label"
+#~ msgid "Default profiles"
+#~ msgstr "Standardprofile"
+
+#~ msgctxt "@label:textbox"
+#~ msgid "search settings"
+#~ msgstr "Einstellungen durchsuchen"
+
+#~ msgctxt "@label"
+#~ msgid "Layer Height"
+#~ msgstr "Schichtdicke"
+
+#~ msgctxt "@tooltip"
+#~ msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
+#~ msgstr "Dieses Qualitätsprofil ist für Ihr aktuelles Material und Ihre derzeitige Düsenkonfiguration nicht verfügbar. Bitte ändern Sie diese, um das Qualitätsprofil zu aktivieren."
+
+#~ msgctxt "@tooltip"
+#~ msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
+#~ msgstr "Ein benutzerdefiniertes Profil ist derzeit aktiv. Wählen Sie ein voreingestelltes Qualitätsprofil aus der Registerkarte „Benutzerdefiniert“, um den Schieberegler für Qualität zu aktivieren"
+
+#~ msgctxt "@title:menu"
+#~ msgid "&Build plate"
+#~ msgstr "&Druckplatte"
+
+#~ msgctxt "@title:settings"
+#~ msgid "&Profile"
+#~ msgstr "&Profil"
+
+#~ msgctxt "@action:label"
+#~ msgid "Build plate"
+#~ msgstr "Druckplatte"
+
+#~ msgctxt "description"
+#~ msgid "Dump the contents of all settings to a HTML file."
+#~ msgstr "Die Inhalte aller Einstellungen in eine HTML-Datei ausgeben."
+
+#~ msgctxt "name"
+#~ msgid "God Mode"
+#~ msgstr "Gott-Modus"
+
+#~ msgctxt "description"
+#~ msgid "Create a flattened quality changes profile."
+#~ msgstr "Erstellt eine geglättete Qualität, verändert das Profil."
+
+#~ msgctxt "name"
+#~ msgid "Profile Flattener"
+#~ msgstr "Profilglättfunktion"
+
+#~ msgctxt "description"
+#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
+#~ msgstr "Ermöglichen Sie Materialherstellern die Erstellung neuer Material- und Qualitätsprofile, indem Sie eine Drop-In-Benutzerschnittstelle verwenden."
+
+#~ msgctxt "name"
+#~ msgid "Print Profile Assistant"
+#~ msgstr "Druckprofil-Assistent"
+
#~ msgctxt "@info:status"
#~ msgid "Connected over the network."
#~ msgstr "Über Netzwerk verbunden."
diff --git a/resources/i18n/de_DE/fdmextruder.def.json.po b/resources/i18n/de_DE/fdmextruder.def.json.po
index be1234cf71..cc39f59f72 100644
--- a/resources/i18n/de_DE/fdmextruder.def.json.po
+++ b/resources/i18n/de_DE/fdmextruder.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-03-13 14:00+0200\n"
"Last-Translator: Bothof \n"
"Language-Team: German\n"
diff --git a/resources/i18n/de_DE/fdmprinter.def.json.po b/resources/i18n/de_DE/fdmprinter.def.json.po
index 18172c1779..aee5ae4ace 100644
--- a/resources/i18n/de_DE/fdmprinter.def.json.po
+++ b/resources/i18n/de_DE/fdmprinter.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-07-29 15:51+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: German , German \n"
@@ -1030,6 +1030,17 @@ msgctxt "bottom_layers description"
msgid "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number."
msgstr "Die Anzahl der unteren Schichten. Wenn diese anhand der unteren Dicke berechnet wird, wird der Wert auf eine ganze Zahl auf- oder abgerundet."
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers label"
+msgid "Initial Bottom Layers"
+msgstr "Erste untere Schichten"
+
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers description"
+msgid "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number."
+msgstr "Die Anzahl der ersten Schichten, die auf die Druckplatte aufgetragen werden. Wenn diese anhand der unteren Dicke berechnet werden, wird der Wert auf eine"
+" ganze Zahl auf- oder abgerundet."
+
#: fdmprinter.def.json
msgctxt "top_bottom_pattern label"
msgid "Top/Bottom Pattern"
@@ -1423,8 +1434,7 @@ msgstr "Glätten aktivieren"
#: fdmprinter.def.json
msgctxt "ironing_enabled description"
msgid "Go over the top surface one additional time, but this time extruding very little material. This is meant to melt the plastic on top further, creating a smoother surface. The pressure in the nozzle chamber is kept high so that the creases in the surface are filled with material."
-msgstr "Gehen Sie ein weiteres Mal über die Oberfläche, aber extrudieren Sie diesmal sehr wenig Material. Dadurch wird die oberste Kunststoffschicht geschmolzen"
-" und es entsteht eine glattere Oberfläche. Der Druck in der Düsenkammer bleibt weiterhin hoch, so dass Risse in der Oberfläche mit Material gefüllt werden."
+msgstr "Gehen Sie ein weiteres Mal über die Oberfläche, aber extrudieren Sie diesmal sehr wenig Material. Dadurch wird die oberste Kunststoffschicht geschmolzen und es entsteht eine glattere Oberfläche. Der Druck in der Düsenkammer bleibt weiterhin hoch, so dass Risse in der Oberfläche mit Material gefüllt werden."
#: fdmprinter.def.json
msgctxt "ironing_only_highest_layer label"
@@ -1709,8 +1719,7 @@ msgstr "Füllstart randomisieren"
#: fdmprinter.def.json
msgctxt "infill_randomize_start_location description"
msgid "Randomize which infill line is printed first. This prevents one segment becoming the strongest, but it does so at the cost of an additional travel move."
-msgstr "Randomisieren Sie, welche Fülllinie zuerst gedruckt wird. So wird vermieden, dass ein Segment am stärksten ist. Allerdings muss dafür eine zusätzliche"
-" Bewegung ausgeführt werden."
+msgstr "Randomisieren Sie, welche Fülllinie zuerst gedruckt wird. So wird vermieden, dass ein Segment am stärksten ist. Allerdings muss dafür eine zusätzliche Bewegung ausgeführt werden."
#: fdmprinter.def.json
msgctxt "infill_multiplier label"
@@ -3569,9 +3578,7 @@ msgstr "Unterstützung Linienrichtung Füllung"
#: fdmprinter.def.json
msgctxt "support_infill_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angle 0 degrees."
-msgstr "Liste der zu verwendenden Linienrichtungen (in ganzen Zahlen). Die Elemente der Liste werden während des Aufbaus der Schichten der Reihe nach abgearbeitet."
-" Wenn das Ende der Liste erreicht wird, wird wieder beim ersten Element begonnen. Die Listenobjekte werden durch Kommas getrennt und die gesamte Liste"
-" ist in eckige Klammern gesetzt. Standardmäßig ist eine leere Liste vorhanden, was bedeutet, dass der Standardwinkel von 0 Grad zu verwenden ist."
+msgstr "Liste der zu verwendenden Linienrichtungen (in ganzen Zahlen). Die Elemente der Liste werden während des Aufbaus der Schichten der Reihe nach abgearbeitet. Wenn das Ende der Liste erreicht wird, wird wieder beim ersten Element begonnen. Die Listenobjekte werden durch Kommas getrennt und die gesamte Liste ist in eckige Klammern gesetzt. Standardmäßig ist eine leere Liste vorhanden, was bedeutet, dass der Standardwinkel von 0 Grad zu verwenden ist."
#: fdmprinter.def.json
msgctxt "support_brim_enable label"
@@ -3985,8 +3992,9 @@ msgstr "Mindestbereich Stützstruktur-Schnittstelle"
#: fdmprinter.def.json
msgctxt "minimum_interface_area description"
-msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
-msgstr "Mindestflächenbreite für Stützstruktur-Schnittstellen-Polygone. Polygone, die eine kleinere Fläche als diesen Wert aufweisen, werden nicht generiert."
+msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Mindestflächenbreite für Stützstruktur-Schnittstellen-Polygone. Polygone, die eine kleinere Fläche als diesen Wert aufweisen, werden als normale Stützstruktur"
+" gedruckt."
#: fdmprinter.def.json
msgctxt "minimum_roof_area label"
@@ -3995,8 +4003,8 @@ msgstr "Mindestbereich Stützstrukturdach"
#: fdmprinter.def.json
msgctxt "minimum_roof_area description"
-msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "Mindestflächenbreite für die Dächer der Stützstruktur. Polygone, die eine kleinere Fläche als diesen Wert aufweisen, werden nicht generiert."
+msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Mindestfläche für die Dächer der Stützstruktur. Polygone, die eine kleinere Fläche als diesen Wert aufweisen, werden als normale Stützstruktur gedruckt."
#: fdmprinter.def.json
msgctxt "minimum_bottom_area label"
@@ -4005,8 +4013,8 @@ msgstr "Mindestbereich Stützstrukturboden"
#: fdmprinter.def.json
msgctxt "minimum_bottom_area description"
-msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "Mindestflächenbreite für die Böden der Stützstruktur. Polygone, die eine kleinere Fläche als diesen Wert aufweisen, werden nicht generiert."
+msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Mindestfläche für die Dächer der Stützstruktur. Polygone, die eine kleinere Fläche als diesen Wert aufweisen, werden als normale Stützstruktur gedruckt."
#: fdmprinter.def.json
msgctxt "support_interface_offset label"
@@ -4046,10 +4054,7 @@ msgstr "Richtungen der Verbindungslinien unterstützen"
#: fdmprinter.def.json
msgctxt "support_interface_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Liste der zu verwendenden Linienrichtungen (in ganzen Zahlen). Die Elemente der Liste werden während des Aufbaus der Schichten der Reihe nach abgearbeitet."
-" Wenn das Ende der Liste erreicht wird, wird wieder beim ersten Element begonnen. Die Listenobjekte werden durch Kommas getrennt und die gesamte Liste"
-" ist in eckige Klammern gesetzt. Standardmäßig ist eine leere Liste vorhanden, was bedeutet, dass herkömmliche Standardwinkel (zwischen 45 und 135- rad,"
-" falls die Verbindungsstellen ziemlich dick sind, oder 90 Grad) zu verwenden sind."
+msgstr "Liste der zu verwendenden Linienrichtungen (in ganzen Zahlen). Die Elemente der Liste werden während des Aufbaus der Schichten der Reihe nach abgearbeitet. Wenn das Ende der Liste erreicht wird, wird wieder beim ersten Element begonnen. Die Listenobjekte werden durch Kommas getrennt und die gesamte Liste ist in eckige Klammern gesetzt. Standardmäßig ist eine leere Liste vorhanden, was bedeutet, dass herkömmliche Standardwinkel (zwischen 45 und 135- rad, falls die Verbindungsstellen ziemlich dick sind, oder 90 Grad) zu verwenden sind."
#: fdmprinter.def.json
msgctxt "support_roof_angles label"
@@ -4059,10 +4064,7 @@ msgstr "Richtungen der Dachlinien unterstützen"
#: fdmprinter.def.json
msgctxt "support_roof_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Liste der zu verwendenden Linienrichtungen (in ganzen Zahlen). Die Elemente der Liste werden während des Aufbaus der Schichten der Reihe nach abgearbeitet."
-" Wenn das Ende der Liste erreicht wird, wird wieder beim ersten Element begonnen. Die Listenobjekte werden durch Kommas getrennt und die gesamte Liste"
-" ist in eckige Klammern gesetzt. Standardmäßig ist eine leere Liste vorhanden, was bedeutet, dass herkömmliche Standardwinkel (zwischen 45 und 135- rad,"
-" falls die Verbindungsstellen ziemlich dick sind, oder 90 Grad) zu verwenden sind."
+msgstr "Liste der zu verwendenden Linienrichtungen (in ganzen Zahlen). Die Elemente der Liste werden während des Aufbaus der Schichten der Reihe nach abgearbeitet. Wenn das Ende der Liste erreicht wird, wird wieder beim ersten Element begonnen. Die Listenobjekte werden durch Kommas getrennt und die gesamte Liste ist in eckige Klammern gesetzt. Standardmäßig ist eine leere Liste vorhanden, was bedeutet, dass herkömmliche Standardwinkel (zwischen 45 und 135- rad, falls die Verbindungsstellen ziemlich dick sind, oder 90 Grad) zu verwenden sind."
#: fdmprinter.def.json
msgctxt "support_bottom_angles label"
@@ -4072,10 +4074,7 @@ msgstr "Richtungen der Bodenlinien unterstützen"
#: fdmprinter.def.json
msgctxt "support_bottom_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Liste der zu verwendenden Linienrichtungen (in ganzen Zahlen). Die Elemente der Liste werden während des Aufbaus der Schichten der Reihe nach abgearbeitet."
-" Wenn das Ende der Liste erreicht wird, wird wieder beim ersten Element begonnen. Die Listenobjekte werden durch Kommas getrennt und die gesamte Liste"
-" ist in eckige Klammern gesetzt. Standardmäßig ist eine leere Liste vorhanden, was bedeutet, dass herkömmliche Standardwinkel (zwischen 45 und 135- rad,"
-" falls die Verbindungsstellen ziemlich dick sind, oder 90 Grad) zu verwenden sind."
+msgstr "Liste der zu verwendenden Linienrichtungen (in ganzen Zahlen). Die Elemente der Liste werden während des Aufbaus der Schichten der Reihe nach abgearbeitet. Wenn das Ende der Liste erreicht wird, wird wieder beim ersten Element begonnen. Die Listenobjekte werden durch Kommas getrennt und die gesamte Liste ist in eckige Klammern gesetzt. Standardmäßig ist eine leere Liste vorhanden, was bedeutet, dass herkömmliche Standardwinkel (zwischen 45 und 135- rad, falls die Verbindungsstellen ziemlich dick sind, oder 90 Grad) zu verwenden sind."
#: fdmprinter.def.json
msgctxt "support_fan_enable label"
@@ -4801,6 +4800,36 @@ msgctxt "remove_empty_first_layers description"
msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle."
msgstr "Entfernen Sie die leeren Schichten unter der ersten gedruckten Schicht, sofern vorhanden. Die Deaktivierung dieser Einstellung kann zu leeren ersten Schichten führen, wenn die Einstellung der Slicing-Toleranz auf Exklusiv oder Mittel gesetzt wurde."
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution label"
+msgid "Maximum Resolution"
+msgstr "Maximale Auflösung"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution description"
+msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
+msgstr "Die Mindestgröße eines Linienabschnitts nach dem Slicen. Wenn Sie diesen Wert erhöhen, führt dies zu einer niedrigeren Auslösung des Mesh. Damit kann der Drucker die erforderliche Geschwindigkeit für die Verarbeitung des G-Codes beibehalten; außerdem wird die Slice-Geschwindigkeit erhöht, indem Details des Mesh entfernt werden, die ohnehin nicht verarbeitet werden können."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution label"
+msgid "Maximum Travel Resolution"
+msgstr "Maximale Bewegungsauflösung"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution description"
+msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
+msgstr "Die maximale Größe eines Bewegungsliniensegments nach dem Slicen. Wenn Sie diesen Wert erhöhen, weisen die Fahrtbewegungen weniger glatte Kanten aus. Das ermöglicht dem Drucker, die für die Verarbeitung eines G-Codes erforderliche Geschwindigkeit aufrechtzuerhalten, allerdings kann das Modell damit auch weniger akkurat werden."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation label"
+msgid "Maximum Deviation"
+msgstr "Maximale Abweichung"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation description"
+msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
+msgstr "Die maximal zulässige Abweichung bei Reduzierung der maximalen Auflösung. Wenn Sie diesen Wert erhöhen, wird der Druck ungenauer, der G-Code wird jedoch kleiner. Die maximale Abweichung ist eine Grenze für die maximale Auflösung. Wenn die beiden Werte sich widersprechen, wird stets die maximale Abweichung eingehalten."
+
#: fdmprinter.def.json
msgctxt "blackmagic label"
msgid "Special Modes"
@@ -5176,38 +5205,6 @@ msgctxt "minimum_polygon_circumference description"
msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details."
msgstr "Polygone in geschnittenen Schichten, die einen Umfang unter diesem Wert haben, werden ausgefiltert. Niedrigere Werte führen zu einem Mesh mit höherer Auflösung zulasten der Slicing-Zeit. Dies gilt in erster Linie für SLA-Drucker mit höherer Auflösung und sehr kleine 3D-Modelle mit zahlreichen Details."
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution label"
-msgid "Maximum Resolution"
-msgstr "Maximale Auflösung"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution description"
-msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
-msgstr "Die Mindestgröße eines Linienabschnitts nach dem Slicen. Wenn Sie diesen Wert erhöhen, führt dies zu einer niedrigeren Auslösung des Mesh. Damit kann der Drucker die erforderliche Geschwindigkeit für die Verarbeitung des G-Codes beibehalten; außerdem wird die Slice-Geschwindigkeit erhöht, indem Details des Mesh entfernt werden, die ohnehin nicht verarbeitet werden können."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution label"
-msgid "Maximum Travel Resolution"
-msgstr "Maximale Bewegungsauflösung"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution description"
-msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
-msgstr "Die maximale Größe eines Bewegungsliniensegments nach dem Slicen. Wenn Sie diesen Wert erhöhen, weisen die Fahrtbewegungen weniger glatte Kanten aus. Das ermöglicht dem Drucker, die für die Verarbeitung eines G-Codes erforderliche Geschwindigkeit aufrechtzuerhalten, allerdings kann das Modell damit auch weniger akkurat werden."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation label"
-msgid "Maximum Deviation"
-msgstr "Maximale Abweichung"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation description"
-msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
-msgstr "Die maximal zulässige Abweichung bei Reduzierung der maximalen Auflösung. Wenn Sie diesen Wert erhöhen, wird der Druck ungenauer, der G-Code wird jedoch"
-" kleiner. Die maximale Abweichung ist eine Grenze für die maximale Auflösung. Wenn die beiden Werte sich widersprechen, wird stets die maximale Abweichung"
-" eingehalten."
-
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
msgid "Break Up Support In Chunks"
@@ -5348,16 +5345,6 @@ msgctxt "coasting_speed description"
msgid "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops."
msgstr "Die Geschwindigkeit, mit der die Bewegung während des Coasting erfolgt, in Relation zur Geschwindigkeit des Extrusionswegs. Ein Wert leicht unter 100 % wird empfohlen, da während der Coasting-Bewegung der Druck in den Bowden-Röhren abfällt."
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation label"
-msgid "Alternate Skin Rotation"
-msgstr "Wechselnde Rotation der Außenhaut"
-
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation description"
-msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
-msgstr "Die Richtung, in welcher die oberen/unteren Schichten gedruckt werden, wird abgewechselt. Normalerweise werden diese nur diagonal gedruckt. Diese Einstellung fügt die Nur-X- und Nur-Y-Richtung zu."
-
#: fdmprinter.def.json
msgctxt "cross_infill_pocket_size label"
msgid "Cross 3D Pocket Size"
@@ -5530,23 +5517,24 @@ msgstr "Der durchschnittliche Abstand zwischen den willkürlich auf jedes Linien
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset label"
-msgid "Flow rate compensation max extrusion offset"
+msgid "Flow Rate Compensation Max Extrusion Offset"
msgstr "Ausgleich Durchflussrate max. Extrusionswirkung"
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset description"
-msgid "The maximum distance in mm to compensate."
-msgstr "Die maximale Distanz in mm für den Ausgleich."
+msgid "The maximum distance in mm to move the filament to compensate for changes in flow rate."
+msgstr "Die maximale Strecke (in mm), die das Filament bewegt werden kann, um Änderungen der Durchflussrate zu kompensieren."
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor label"
-msgid "Flow rate compensation factor"
+msgid "Flow Rate Compensation Factor"
msgstr "Ausgleichsfaktor Durchflussrate"
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor description"
-msgid "The multiplication factor for the flow rate -> distance translation."
-msgstr "Der Multiplikationsfaktor für die Übersetzung Durchflussrate -> Distanz."
+msgid "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."
+msgstr "Wie weit das Filament bewegt werden kann, um Änderungen der Durchflussrate zu kompensieren – als Prozentsatz der Strecke, die das Filament sich während"
+" einer Sekunde Extrusion bewegen würde."
#: fdmprinter.def.json
msgctxt "wireframe_enabled label"
@@ -5839,13 +5827,14 @@ msgstr "Der Höhenunterscheid der nächsten Schichthöhe im Vergleich zur vorher
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold label"
-msgid "Adaptive Layers Threshold"
-msgstr "Schwellenwert Anpassschichten"
+msgid "Adaptive Layers Topography Size"
+msgstr "Topographische Größe der Anpassschichten"
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold description"
-msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
-msgstr "Das ist der Schwellenwert, der definiert, ob eine kleinere Schicht verwendet wird oder nicht. Dieser Wert wird mit dem der stärksten Neigung in einer Schicht verglichen."
+msgid "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."
+msgstr "Horizontaler Abstand zwischen zwei angrenzenden Schichten. Bei Einstellung eines niedrigeren Werts werden dünnere Schichten aufgetragen, damit die Kanten"
+" der Schichten enger aneinander liegen."
#: fdmprinter.def.json
msgctxt "wall_overhang_angle label"
@@ -5854,8 +5843,9 @@ msgstr "Winkel für überhängende Wände"
#: fdmprinter.def.json
msgctxt "wall_overhang_angle description"
-msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
-msgstr "Wände, die über diesen Winkel hinaus hängen, werden mithilfe der Einstellungen für Winkel für überhängende Wände gedruckt. Wenn der Wert 90 beträgt, werden keine Wände als überhängend behandelt."
+msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging. Overhang that gets supported by support will not be treated as overhang either."
+msgstr "Wände, die über diesen Winkel hinaus hängen, werden mithilfe der Einstellungen für Winkel für überhängende Wände gedruckt. Wenn der Wert 90 beträgt, werden"
+" keine Wände als überhängend behandelt. Überhänge, die von Stützstrukturen gestützt werden, werden ebenfalls nicht als Überhang behandelt."
#: fdmprinter.def.json
msgctxt "wall_overhang_speed_factor label"
@@ -6234,20 +6224,20 @@ msgstr "Detailgeschwindigkeit"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor description"
-msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
msgstr "Bei kleinen Details wird die Geschwindigkeit auf diesen Prozentsatz der normalen Druckgeschwindigkeit gesetzt. Durch eine niedrigere Druckgeschwindigkeit"
-" kann die Haftung und die Genauigkeit verbessert werden."
+" können die Haftung und die Genauigkeit verbessert werden."
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 label"
-msgid "First Layer Speed"
-msgstr "Geschwindigkeit für erste Schicht"
+msgid "Small Feature Initial Layer Speed"
+msgstr "Geschwindigkeit der ersten Schicht von Details"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 description"
-msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
msgstr "Bei kleinen Details wird die Geschwindigkeit bei der ersten Schicht auf diesen Prozentsatz der normalen Druckgeschwindigkeit gesetzt. Durch eine niedrigere"
-" Druckgeschwindigkeit kann die Haftung und die Genauigkeit verbessert werden."
+" Druckgeschwindigkeit können die Haftung und die Genauigkeit verbessert werden."
#: fdmprinter.def.json
msgctxt "command_line_settings label"
@@ -6309,6 +6299,66 @@ msgctxt "mesh_rotation_matrix description"
msgid "Transformation matrix to be applied to the model when loading it from file."
msgstr "Transformationsmatrix, die beim Laden aus der Datei auf das Modell angewandt wird."
+#~ msgctxt "minimum_interface_area description"
+#~ msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Mindestflächenbreite für Stützstruktur-Schnittstellen-Polygone. Polygone, die eine kleinere Fläche als diesen Wert aufweisen, werden nicht generiert."
+
+#~ msgctxt "minimum_roof_area description"
+#~ msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Mindestflächenbreite für die Dächer der Stützstruktur. Polygone, die eine kleinere Fläche als diesen Wert aufweisen, werden nicht generiert."
+
+#~ msgctxt "minimum_bottom_area description"
+#~ msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Mindestflächenbreite für die Böden der Stützstruktur. Polygone, die eine kleinere Fläche als diesen Wert aufweisen, werden nicht generiert."
+
+#~ msgctxt "skin_alternate_rotation label"
+#~ msgid "Alternate Skin Rotation"
+#~ msgstr "Wechselnde Rotation der Außenhaut"
+
+#~ msgctxt "skin_alternate_rotation description"
+#~ msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
+#~ msgstr "Die Richtung, in welcher die oberen/unteren Schichten gedruckt werden, wird abgewechselt. Normalerweise werden diese nur diagonal gedruckt. Diese Einstellung fügt die Nur-X- und Nur-Y-Richtung zu."
+
+#~ msgctxt "flow_rate_max_extrusion_offset label"
+#~ msgid "Flow rate compensation max extrusion offset"
+#~ msgstr "Ausgleich Durchflussrate max. Extrusionswirkung"
+
+#~ msgctxt "flow_rate_max_extrusion_offset description"
+#~ msgid "The maximum distance in mm to compensate."
+#~ msgstr "Die maximale Distanz in mm für den Ausgleich."
+
+#~ msgctxt "flow_rate_extrusion_offset_factor label"
+#~ msgid "Flow rate compensation factor"
+#~ msgstr "Ausgleichsfaktor Durchflussrate"
+
+#~ msgctxt "flow_rate_extrusion_offset_factor description"
+#~ msgid "The multiplication factor for the flow rate -> distance translation."
+#~ msgstr "Der Multiplikationsfaktor für die Übersetzung Durchflussrate -> Distanz."
+
+#~ msgctxt "adaptive_layer_height_threshold label"
+#~ msgid "Adaptive Layers Threshold"
+#~ msgstr "Schwellenwert Anpassschichten"
+
+#~ msgctxt "adaptive_layer_height_threshold description"
+#~ msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
+#~ msgstr "Das ist der Schwellenwert, der definiert, ob eine kleinere Schicht verwendet wird oder nicht. Dieser Wert wird mit dem der stärksten Neigung in einer Schicht verglichen."
+
+#~ msgctxt "wall_overhang_angle description"
+#~ msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
+#~ msgstr "Wände, die über diesen Winkel hinaus hängen, werden mithilfe der Einstellungen für Winkel für überhängende Wände gedruckt. Wenn der Wert 90 beträgt, werden keine Wände als überhängend behandelt."
+
+#~ msgctxt "small_feature_speed_factor description"
+#~ msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "Bei kleinen Details wird die Geschwindigkeit auf diesen Prozentsatz der normalen Druckgeschwindigkeit gesetzt. Durch eine niedrigere Druckgeschwindigkeit kann die Haftung und die Genauigkeit verbessert werden."
+
+#~ msgctxt "small_feature_speed_factor_0 label"
+#~ msgid "First Layer Speed"
+#~ msgstr "Geschwindigkeit für erste Schicht"
+
+#~ msgctxt "small_feature_speed_factor_0 description"
+#~ msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "Bei kleinen Details wird die Geschwindigkeit bei der ersten Schicht auf diesen Prozentsatz der normalen Druckgeschwindigkeit gesetzt. Durch eine niedrigere Druckgeschwindigkeit kann die Haftung und die Genauigkeit verbessert werden."
+
#~ msgctxt "ironing_enabled description"
#~ msgid "Go over the top surface one additional time, but without extruding material. This is meant to melt the plastic on top further, creating a smoother surface."
#~ msgstr "Gehen Sie ein weiteres Mal über die Oberfläche, jedoch ohne Extrusionsmaterial. Damit wird der Kunststoff auf der Oberfläche weiter geschmolzen, was zu einer glatteren Oberfläche führt."
diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po
index 44487032d0..f971746925 100644
--- a/resources/i18n/es_ES/cura.po
+++ b/resources/i18n/es_ES/cura.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0200\n"
+"POT-Creation-Date: 2019-11-05 13:13+0100\n"
"PO-Revision-Date: 2019-07-29 15:51+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: Spanish , Spanish \n"
@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.2.3\n"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:30
msgctxt "@action"
msgid "Machine Settings"
msgstr "Ajustes de la máquina"
@@ -40,13 +40,13 @@ msgctxt "@item:inlistbox"
msgid "G-code File"
msgstr "Archivo GCode"
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:66
msgctxt "@error:not supported"
msgid "GCodeWriter does not support non-text mode."
msgstr "GCodeWriter no es compatible con el modo sin texto."
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:72
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:88
msgctxt "@warning:status"
msgid "Please prepare G-code before exporting."
msgstr "Prepare el Gcode antes de la exportación."
@@ -56,7 +56,7 @@ msgctxt "@info:title"
msgid "3D Model Assistant"
msgstr "Asistente del modelo 3D"
-#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:90
+#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:92
#, python-brace-format
msgctxt "@info:status"
msgid ""
@@ -75,16 +75,6 @@ msgctxt "@action"
msgid "Update Firmware"
msgstr "Actualizar firmware"
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23
-msgctxt "@item:inmenu"
-msgid "Flatten active settings"
-msgstr "Aplanar ajustes activos"
-
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35
-msgctxt "@info:status"
-msgid "Profile has been flattened & activated."
-msgstr "El perfil se ha aplanado y activado."
-
#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "AMF File"
@@ -125,21 +115,6 @@ msgctxt "@message"
msgid "Print in Progress"
msgstr "Impresión en curso"
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
-msgctxt "X3g Writer Plugin Description"
-msgid "Writes X3g to files"
-msgstr "Escribe X3g en archivos"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21
-msgctxt "X3g Writer File Description"
-msgid "X3g File"
-msgstr "Archivo X3g"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15
-msgctxt "X3G Writer File Description"
-msgid "X3G File"
-msgstr "Archivo X3G"
-
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17
#: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17
msgctxt "@item:inlistbox"
@@ -211,9 +186,9 @@ msgid "Could not save to removable drive {0}: {1}"
msgstr "No se pudo guardar en unidad extraíble {0}: {1}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1634
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:139
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:146
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1668
msgctxt "@info:title"
msgid "Error"
msgstr "Error"
@@ -243,8 +218,8 @@ msgstr "Expulsar dispositivo extraíble {0}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1624
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1724
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1658
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1758
msgctxt "@info:title"
msgid "Warning"
msgstr "Advertencia"
@@ -276,17 +251,17 @@ msgctxt "@action"
msgid "Connect via Network"
msgstr "Conectar a través de la red"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:57
msgctxt "@action:button Preceded by 'Ready to'."
msgid "Print over network"
msgstr "Imprimir a través de la red"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:58
msgctxt "@properties:tooltip"
msgid "Print over network"
msgstr "Imprime a través de la red"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:59
msgctxt "@info:status"
msgid "Connected over the network"
msgstr "Conectado a través de la red"
@@ -301,6 +276,21 @@ msgctxt "@info:title"
msgid "Print error"
msgstr "Error de impresión"
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:21
+msgctxt "@info:title"
+msgid "New cloud printers found"
+msgstr "Se han encontrado nuevas impresoras en la nube"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:22
+msgctxt "@info:message"
+msgid "New printers have been found connected to your account, you can find them in your list of discovered printers."
+msgstr "Se han encontrado nuevas impresoras conectadas a tu cuenta; puedes verlas en la lista de impresoras descubiertas."
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:27
+msgctxt "@info:option_text"
+msgid "Do not show this message again"
+msgstr "No volver a mostrar este mensaje"
+
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
@@ -501,7 +491,7 @@ msgid "GIF Image"
msgstr "Imagen GIF"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
-msgctxt "@item:inlistbox"
+msgctxt "@item:inlistbox 'Open' is part of the name of this file format."
msgid "Open Compressed Triangle Mesh"
msgstr "Open Compressed Triangle Mesh"
@@ -594,12 +584,12 @@ msgctxt "@info:tooltip"
msgid "Configure Per Model Settings"
msgstr "Configurar ajustes por modelo"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:186
msgctxt "@title:tab"
msgid "Recommended"
msgstr "Recomendado"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:188
msgctxt "@title:tab"
msgid "Custom"
msgstr "Personalizado"
@@ -610,19 +600,19 @@ msgctxt "@item:inlistbox"
msgid "3MF File"
msgstr "Archivo 3MF"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:198
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:651
msgctxt "@label"
msgid "Nozzle"
msgstr "Tobera"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:496
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead."
msgstr "El archivo del proyecto {0} contiene un tipo de máquina desconocida {1}. No se puede importar la máquina, en su lugar, se importarán los modelos."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:499
msgctxt "@info:title"
msgid "Open Project File"
msgstr "Abrir archivo de proyecto"
@@ -702,16 +692,6 @@ msgctxt "@item:inlistbox"
msgid "Cura Profile"
msgstr "Perfil de cura"
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12
-msgctxt "@item:inmenu"
-msgid "Profile Assistant"
-msgstr "Asistente del perfil"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:18
-msgctxt "@item:inlistbox"
-msgid "Profile Assistant"
-msgstr "Asistente del perfil"
-
#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26
msgctxt "@item:inlistbox"
msgid "3MF file"
@@ -732,7 +712,6 @@ msgctxt "@item:inmenu"
msgid "Preview"
msgstr "Vista previa"
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:19
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18
msgctxt "@action"
msgid "Select upgrades"
@@ -748,134 +727,148 @@ msgctxt "@info:title"
msgid "Login failed"
msgstr "Fallo de inicio de sesión"
-#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:36
msgctxt "@info:not supported profile"
msgid "Not supported"
msgstr "No compatible"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:55
+msgctxt "@info:No intent profile selected"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:196
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:125
msgctxt "@title:window"
msgid "File Already Exists"
msgstr "El archivo ya existe"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:197
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:126
#, python-brace-format
msgctxt "@label Don't translate the XML tag !"
msgid "The file {0} already exists. Are you sure you want to overwrite it?"
msgstr "El archivo {0} ya existe. ¿Está seguro de que desea sobrescribirlo?"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:427
#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:430
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:433
msgctxt "@info:status"
msgid "Invalid file URL:"
msgstr "URL del archivo no válida:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:780
msgctxt "@info:message Followed by a list of settings."
msgid "Settings have been changed to match the current availability of extruders:"
msgstr "La configuración se ha cambiado para que coincida con los extrusores disponibles en este momento:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:782
msgctxt "@info:title"
msgid "Settings updated"
msgstr "Ajustes actualizados"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1334
msgctxt "@info:title"
msgid "Extruder(s) Disabled"
msgstr "Extrusores deshabilitados"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1457
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:99
+#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+msgctxt "@label"
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Failed to export profile to {0}: {1}"
msgstr "Error al exportar el perfil a {0}: {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to export profile to {0}: Writer plugin reported failure."
msgstr "Error al exportar el perfil a {0}: Error en el complemento de escritura."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:149
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Exported profile to {0}"
msgstr "Perfil exportado a {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150
msgctxt "@info:title"
msgid "Export succeeded"
msgstr "Exportación correcta"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}: {1}"
msgstr "Error al importar el perfil de {0}: {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:181
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Can't import profile from {0} before a printer is added."
msgstr "No se puede importar el perfil de {0} antes de añadir una impresora."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:198
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "No custom profile to import in file {0}"
msgstr "No hay ningún perfil personalizado para importar en el archivo {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:202
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}:"
msgstr "Error al importar el perfil de {0}:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:226
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:236
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "This profile {0} contains incorrect data, could not import it."
msgstr "Este perfil {0} contiene datos incorrectos, no se han podido importar."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:325
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to import profile from {0}:"
msgstr "Error al importar el perfil de {0}:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:328
#, python-brace-format
msgctxt "@info:status"
msgid "Successfully imported profile {0}"
msgstr "Perfil {0} importado correctamente"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:331
#, python-brace-format
msgctxt "@info:status"
msgid "File {0} does not contain any valid profile."
msgstr "El archivo {0} no contiene ningún perfil válido."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:334
#, python-brace-format
msgctxt "@info:status"
msgid "Profile {0} has an unknown file type or is corrupted."
msgstr "El perfil {0} tiene un tipo de archivo desconocido o está corrupto."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369
msgctxt "@label"
msgid "Custom profile"
msgstr "Perfil personalizado"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:385
msgctxt "@info:status"
msgid "Profile is missing a quality type."
msgstr "Al perfil le falta un tipo de calidad."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:399
#, python-brace-format
msgctxt "@info:status"
msgid "Could not find a quality type {0} for the current configuration."
@@ -941,14 +934,13 @@ msgctxt "@tooltip"
msgid "Other"
msgstr "Otro"
-#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:306
+#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:302
#, python-brace-format
msgctxt "@label"
msgid "Pre-sliced file {0}"
msgstr "Archivo {0} presegmentado"
#: /home/ruben/Projects/Cura/cura/UI/WelcomePagesModel.py:56
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:62
msgctxt "@action:button"
msgid "Next"
msgstr "Siguiente"
@@ -962,9 +954,9 @@ msgstr "N.º de grupo {group_nr}"
#: /home/ruben/Projects/Cura/cura/UI/WhatsNewPagesModel.py:17
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:133
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:169
msgctxt "@action:button"
msgid "Close"
msgstr "Cerrar"
@@ -979,40 +971,87 @@ msgstr "Agregar"
#: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:18
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:19
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:81
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:352
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:42
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:58
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:149
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:406
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:294
msgctxt "@action:button"
msgid "Cancel"
msgstr "Cancelar"
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:36
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:320
+msgctxt "@label"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:39
+msgctxt "@label"
+msgid "Visual"
+msgstr "Visual"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:40
+msgctxt "@text"
+msgid "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality."
+msgstr "El perfil visual está diseñado para imprimir prototipos y modelos visuales con la intención de obtener una alta calidad visual y de superficies."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:43
+msgctxt "@label"
+msgid "Engineering"
+msgstr "Engineering"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:44
+msgctxt "@text"
+msgid "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances."
+msgstr "El perfil de ingeniería ha sido diseñado para imprimir prototipos funcionales y piezas de uso final con la intención de obtener una mayor precisión y tolerancias"
+" más precisas."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:47
+msgctxt "@label"
+msgid "Draft"
+msgstr "Boceto"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:48
+msgctxt "@text"
+msgid "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction."
+msgstr "El perfil del boceto ha sido diseñado para imprimir los prototipos iniciales y la validación del concepto con la intención de reducir el tiempo de impresión"
+" de manera considerable."
+
#: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208
msgctxt "@menuitem"
msgid "Not overridden"
msgstr "No reemplazado"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:109
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:357
+msgctxt "@label"
+msgid "Custom profiles"
+msgstr "Perfiles personalizados"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:391
#, python-brace-format
msgctxt "@item:inlistbox"
msgid "All Supported Types ({0})"
msgstr "Todos los tipos compatibles ({0})"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:110
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:392
msgctxt "@item:inlistbox"
msgid "All Files (*)"
msgstr "Todos los archivos (*)"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:213
msgctxt "@label"
-msgid "Unknown"
-msgstr "Desconocido"
+msgid "Custom Material"
+msgstr "Material personalizado"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:214
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:205
+msgctxt "@label"
+msgid "Custom"
+msgstr "Personalizado"
#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116
msgctxt "@label"
@@ -1024,17 +1063,6 @@ msgctxt "@label"
msgid "Available networked printers"
msgstr "Impresoras en red disponibles"
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689
-msgctxt "@label"
-msgid "Custom Material"
-msgstr "Material personalizado"
-
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:690
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:203
-msgctxt "@label"
-msgid "Custom"
-msgstr "Personalizado"
-
#: /home/ruben/Projects/Cura/cura/BuildVolume.py:90
msgctxt "@info:status"
msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models."
@@ -1070,11 +1098,6 @@ msgctxt "@info"
msgid "Unable to reach the Ultimaker account server."
msgstr "No se puede acceder al servidor de cuentas de Ultimaker."
-#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202
-msgctxt "@action:button"
-msgid "Retry"
-msgstr "Volver a intentar"
-
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70
msgctxt "@message"
msgid "Please give the required permissions when authorizing this application."
@@ -1259,62 +1282,67 @@ msgctxt "@action:button"
msgid "Send report"
msgstr "Enviar informe"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:513
msgctxt "@info:progress"
msgid "Loading machines..."
msgstr "Cargando máquinas..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:520
+msgctxt "@info:progress"
+msgid "Setting up preferences..."
+msgstr "Configurando preferencias...."
+
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:824
msgctxt "@info:progress"
msgid "Setting up scene..."
msgstr "Configurando escena..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:859
msgctxt "@info:progress"
msgid "Loading interface..."
msgstr "Cargando interfaz..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1150
#, python-format
msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm."
msgid "%(width).1f x %(depth).1f x %(height).1f mm"
msgstr "%(width).1f x %(depth).1f x %(height).1f mm"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1657
#, python-brace-format
msgctxt "@info:status"
msgid "Only one G-code file can be loaded at a time. Skipped importing {0}"
msgstr "Solo se puede cargar un archivo GCode a la vez. Se omitió la importación de {0}"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1667
#, python-brace-format
msgctxt "@info:status"
msgid "Can't open any other file if G-code is loading. Skipped importing {0}"
msgstr "No se puede abrir ningún archivo si se está cargando un archivo GCode. Se omitió la importación de {0}"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1757
msgctxt "@info:status"
msgid "The selected model was too small to load."
msgstr "No se puede cargar el modelo seleccionado, es demasiado pequeño."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:56
msgctxt "@title:label"
msgid "Printer Settings"
msgstr "Ajustes de la impresora"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70
msgctxt "@label"
msgid "X (Width)"
msgstr "X (anchura)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:76
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:90
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:104
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:206
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:225
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:244
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:74
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:88
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:102
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:203
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:223
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:243
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:265
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:285
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:79
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:93
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:109
@@ -1323,57 +1351,57 @@ msgctxt "@label"
msgid "mm"
msgstr "mm"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84
msgctxt "@label"
msgid "Y (Depth)"
msgstr "Y (profundidad)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98
msgctxt "@label"
msgid "Z (Height)"
msgstr "Z (altura)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112
msgctxt "@label"
msgid "Build plate shape"
msgstr "Forma de la placa de impresión"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125
msgctxt "@label"
msgid "Origin at center"
msgstr "Origen en el centro"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137
msgctxt "@label"
msgid "Heated bed"
msgstr "Plataforma calentada"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149
msgctxt "@label"
msgid "Heated build volume"
msgstr "Volumen de impresión calentado"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:161
msgctxt "@label"
msgid "G-code flavor"
msgstr "Tipo de GCode"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:185
msgctxt "@title:label"
msgid "Printhead Settings"
msgstr "Ajustes del cabezal de impresión"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:199
msgctxt "@label"
msgid "X min"
msgstr "X mín."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:219
msgctxt "@label"
msgid "Y min"
msgstr "Y mín."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:239
msgctxt "@label"
msgid "X max"
msgstr "X máx."
@@ -1383,22 +1411,22 @@ msgctxt "@label"
msgid "Y max"
msgstr "Y máx."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:281
msgctxt "@label"
msgid "Gantry Height"
msgstr "Altura del puente"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:295
msgctxt "@label"
msgid "Number of Extruders"
msgstr "Número de extrusores"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:355
msgctxt "@title:label"
msgid "Start G-code"
msgstr "Iniciar GCode"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:366
msgctxt "@title:label"
msgid "End G-code"
msgstr "Finalizar GCode"
@@ -1477,7 +1505,7 @@ msgstr "Complementos"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:77
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:44
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:89
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417
msgctxt "@title:tab"
msgid "Materials"
@@ -1672,11 +1700,6 @@ msgctxt "@label:table_header"
msgid "Machine"
msgstr "Máquina"
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131
-msgctxt "@label:table_header"
-msgid "Print Core"
-msgstr "Print core"
-
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137
msgctxt "@label:table_header"
msgid "Build Plate"
@@ -1932,9 +1955,9 @@ msgid "Edit"
msgstr "Editar"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:88
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:155
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:138
msgctxt "@action:button"
msgid "Remove"
msgstr "Eliminar"
@@ -1955,61 +1978,61 @@ msgctxt "@label"
msgid "Type"
msgstr "Tipo"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:225
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274
msgctxt "@label"
msgid "Firmware version"
msgstr "Versión de firmware"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:239
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:290
msgctxt "@label"
msgid "Address"
msgstr "Dirección"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:263
msgctxt "@label"
msgid "This printer is not set up to host a group of printers."
msgstr "Esta impresora no está configurada para alojar un grupo de impresoras."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:267
msgctxt "@label"
msgid "This printer is the host for a group of %1 printers."
msgstr "Esta impresora aloja un grupo de %1 impresoras."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:278
msgctxt "@label"
msgid "The printer at this address has not yet responded."
msgstr "La impresora todavía no ha respondido en esta dirección."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283
msgctxt "@action:button"
msgid "Connect"
msgstr "Conectar"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:296
msgctxt "@title:window"
msgid "Invalid IP address"
msgstr "Dirección IP no válida"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146
msgctxt "@text"
msgid "Please enter a valid IP address."
msgstr "Introduzca una dirección IP válida."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:308
msgctxt "@title:window"
msgid "Printer Address"
msgstr "Dirección de la impresora"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:331
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102
msgctxt "@label"
msgid "Enter the IP address of your printer on the network."
msgstr "Introduzca la dirección IP de la impresora en la red."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181
msgctxt "@action:button"
@@ -2064,17 +2087,17 @@ msgctxt "@label:status"
msgid "Finishes %1 at %2"
msgstr "Termina el %1 a las %2"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44
-msgctxt "@action:button"
-msgid "Print"
-msgstr "Imprimir"
-
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:11
msgctxt "@title:window"
msgid "Print over network"
msgstr "Imprimir a través de la red"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:52
+msgctxt "@action:button"
+msgid "Print"
+msgstr "Imprimir"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:80
msgctxt "@label"
msgid "Printer selection"
msgstr "Selección de la impresora"
@@ -2425,70 +2448,69 @@ msgctxt "@action:label"
msgid "Smoothing"
msgstr "Suavizado"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37
-msgctxt "@label"
-msgid "Mesh Type"
-msgstr "Tipo de malla"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68
-msgctxt "@label"
-msgid "Normal model"
-msgstr "Modelo normal"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75
-msgctxt "@label"
-msgid "Print as support"
-msgstr "Imprimir como soporte"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83
-msgctxt "@label"
-msgid "Don't support overlap with other models"
-msgstr "No crear soporte en otros modelos (por superposición)"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91
-msgctxt "@label"
-msgid "Modify settings for overlap with other models"
-msgstr "Modificar ajustes de otros modelos (por superposición)"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99
-msgctxt "@label"
-msgid "Modify settings for infill of other models"
-msgstr "Modificar ajustes del relleno de otros modelos"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:346
-msgctxt "@action:button"
-msgid "Select settings"
-msgstr "Seleccionar ajustes"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:388
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:13
msgctxt "@title:window"
msgid "Select Settings to Customize for this model"
msgstr "Seleccionar ajustes o personalizar este modelo"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:56
#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:94
msgctxt "@label:textbox"
msgid "Filter..."
msgstr "Filtrar..."
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:70
msgctxt "@label:checkbox"
msgid "Show all"
msgstr "Mostrar todo"
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:44
+msgctxt "@label"
+msgid "Mesh Type"
+msgstr "Tipo de malla"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:85
+msgctxt "@label"
+msgid "Normal model"
+msgstr "Modelo normal"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:97
+msgctxt "@label"
+msgid "Print as support"
+msgstr "Imprimir como soporte"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:109
+msgctxt "@label"
+msgid "Modify settings for overlaps"
+msgstr "Modificar los ajustes de las superposiciones"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:121
+msgctxt "@label"
+msgid "Don't support overlaps"
+msgstr "No es compatible con superposiciones"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:145
+msgctxt "@action:checkbox"
+msgid "Infill only"
+msgstr "Solo relleno"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:368
+msgctxt "@action:button"
+msgid "Select settings"
+msgstr "Seleccionar ajustes"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:14
msgctxt "@title:window"
msgid "Open Project"
msgstr "Abrir proyecto"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:58
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Update/override existing profile"
msgid "Update existing"
msgstr "Actualizar existente"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:59
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Save settings in a new profile"
msgid "Create new"
msgstr "Crear nuevo"
@@ -2515,6 +2537,11 @@ msgctxt "@action:ComboBox option"
msgid "Update"
msgstr "Actualizar"
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
+msgctxt "@action:ComboBox option"
+msgid "Create new"
+msgstr "Crear nuevo"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:106
msgctxt "@action:label"
@@ -2528,7 +2555,7 @@ msgid "Printer Group"
msgstr "Grupo de impresoras"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:220
msgctxt "@action:label"
msgid "Profile settings"
msgstr "Ajustes del perfil"
@@ -2539,75 +2566,81 @@ msgid "How should the conflict in the profile be resolved?"
msgstr "¿Cómo debería solucionarse el conflicto en el perfil?"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:323
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:244
msgctxt "@action:label"
msgid "Name"
msgstr "Nombre"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261
+msgctxt "@action:label"
+msgid "Intent"
+msgstr "Intent"
+
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:246
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228
msgctxt "@action:label"
msgid "Not in profile"
msgstr "No está en el perfil"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:251
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:233
msgctxt "@action:label"
msgid "%1 override"
msgid_plural "%1 overrides"
msgstr[0] "%1 sobrescrito"
msgstr[1] "%1 sobrescritos"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:247
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:262
msgctxt "@action:label"
msgid "Derivative from"
msgstr "Derivado de"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:252
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:267
msgctxt "@action:label"
msgid "%1, %2 override"
msgid_plural "%1, %2 overrides"
msgstr[0] "%1, %2 sobrescrito"
msgstr[1] "%1, %2 sobrescritos"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:268
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:283
msgctxt "@action:label"
msgid "Material settings"
msgstr "Ajustes del material"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:284
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:299
msgctxt "@info:tooltip"
msgid "How should the conflict in the material be resolved?"
msgstr "¿Cómo debería solucionarse el conflicto en el material?"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:342
msgctxt "@action:label"
msgid "Setting visibility"
msgstr "Visibilidad de los ajustes"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:336
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:351
msgctxt "@action:label"
msgid "Mode"
msgstr "Modo"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:367
msgctxt "@action:label"
msgid "Visible settings:"
msgstr "Ajustes visibles:"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:372
msgctxt "@action:label"
msgid "%1 out of %2"
msgstr "%1 de un total de %2"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:383
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:398
msgctxt "@action:warning"
msgid "Loading a project will clear all models on the build plate."
msgstr "Si carga un proyecto, se borrarán todos los modelos de la placa de impresión."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:401
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:416
msgctxt "@action:button"
msgid "Open"
msgstr "Abrir"
@@ -2714,54 +2747,6 @@ msgctxt "@checkbox:description"
msgid "Automatically create a backup each day that Cura is started."
msgstr "Crea una copia de seguridad de forma automática cada día que inicia Cura."
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMainSettingsSelector.qml:75
-msgctxt "@label"
-msgid "Not supported"
-msgstr "No compatible"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:35
-msgctxt "@action:button"
-msgid "Previous"
-msgstr "Anterior"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:174
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:159
-msgctxt "@action:button"
-msgid "Export"
-msgstr "Exportar"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209
-msgctxt "@label"
-msgid "Tip"
-msgstr "Consejo"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMaterialMenu.qml:20
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66
-msgctxt "@label:category menu label"
-msgid "Generic"
-msgstr "Genérico"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:160
-msgctxt "@label"
-msgid "Print experiment"
-msgstr "Ensayo de impresión"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:25
-msgctxt "@label"
-msgid "Checklist"
-msgstr "Lista de verificación"
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:30
-msgctxt "@label"
-msgid "Please select any upgrades made to this Ultimaker 2."
-msgstr "Seleccione cualquier actualización de este Ultimaker 2."
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:44
-msgctxt "@label"
-msgid "Olsson Block"
-msgstr "Bloque Olsson"
-
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:30
msgctxt "@title"
msgid "Build Plate Leveling"
@@ -2847,170 +2832,176 @@ msgctxt "@label"
msgid "Are you sure you want to abort the print?"
msgstr "¿Está seguro de que desea cancelar la impresión?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:72
msgctxt "@title"
msgid "Information"
msgstr "Información"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
msgctxt "@title:window"
msgid "Confirm Diameter Change"
msgstr "Confirmar cambio de diámetro"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:102
msgctxt "@label (%1 is a number)"
msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?"
msgstr "El nuevo diámetro del filamento está ajustado en %1 mm y no es compatible con el extrusor actual. ¿Desea continuar?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:128
msgctxt "@label"
msgid "Display Name"
msgstr "Mostrar nombre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:138
msgctxt "@label"
msgid "Brand"
msgstr "Marca"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:148
msgctxt "@label"
msgid "Material Type"
msgstr "Tipo de material"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:158
msgctxt "@label"
msgid "Color"
msgstr "Color"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:208
msgctxt "@label"
msgid "Properties"
msgstr "Propiedades"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:210
msgctxt "@label"
msgid "Density"
msgstr "Densidad"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:225
msgctxt "@label"
msgid "Diameter"
msgstr "Diámetro"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:259
msgctxt "@label"
msgid "Filament Cost"
msgstr "Coste del filamento"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:276
msgctxt "@label"
msgid "Filament weight"
-msgstr "Anchura del filamento"
+msgstr "Peso del filamento"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:294
msgctxt "@label"
msgid "Filament length"
msgstr "Longitud del filamento"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:303
msgctxt "@label"
msgid "Cost per Meter"
msgstr "Coste por metro"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:317
msgctxt "@label"
msgid "This material is linked to %1 and shares some of its properties."
msgstr "Este material está vinculado a %1 y comparte alguna de sus propiedades."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:324
msgctxt "@label"
msgid "Unlink Material"
msgstr "Desvincular material"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:335
msgctxt "@label"
msgid "Description"
msgstr "Descripción"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:348
msgctxt "@label"
msgid "Adhesion Information"
msgstr "Información sobre adherencia"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:374
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19
msgctxt "@label"
msgid "Print settings"
msgstr "Ajustes de impresión"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:108
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:84
msgctxt "@action:button"
msgid "Activate"
msgstr "Activar"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:126
msgctxt "@action:button"
msgid "Create"
msgstr "Crear"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:140
msgctxt "@action:button"
msgid "Duplicate"
msgstr "Duplicado"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:170
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:167
msgctxt "@action:button"
msgid "Import"
msgstr "Importar"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:184
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:179
+msgctxt "@action:button"
+msgid "Export"
+msgstr "Exportar"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:233
msgctxt "@action:label"
msgid "Printer"
msgstr "Impresora"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:297
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:274
msgctxt "@title:window"
msgid "Confirm Remove"
msgstr "Confirmar eliminación"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:275
msgctxt "@label (%1 is object name)"
msgid "Are you sure you wish to remove %1? This cannot be undone!"
msgstr "¿Seguro que desea eliminar %1? ¡Esta acción no se puede deshacer!"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:322
msgctxt "@title:window"
msgid "Import Material"
msgstr "Importar material"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:323
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Could not import material %1: %2"
msgstr "No se pudo importar el material en %1: %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:327
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully imported material %1"
msgstr "El material se ha importado correctamente en %1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
msgctxt "@title:window"
msgid "Export Material"
msgstr "Exportar material"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:357
msgctxt "@info:status Don't translate the XML tags and !"
msgid "Failed to export material to %1: %2"
msgstr "Se ha producido un error al exportar el material a %1: %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:363
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully exported material to %1"
msgstr "El material se ha exportado correctamente a %1"
@@ -3025,27 +3016,27 @@ msgctxt "@label:textbox"
msgid "Check all"
msgstr "Comprobar todo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:48
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
msgctxt "@info:status"
msgid "Calculated"
msgstr "Calculado"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
msgctxt "@title:column"
msgid "Setting"
msgstr "Ajustes"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:68
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:82
msgctxt "@title:column"
msgid "Profile"
msgstr "Perfil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:89
msgctxt "@title:column"
msgid "Current"
msgstr "Actual"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:83
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:97
msgctxt "@title:column"
msgid "Unit"
msgstr "Unidad"
@@ -3056,307 +3047,301 @@ msgctxt "@title:tab"
msgid "General"
msgstr "General"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:132
msgctxt "@label"
msgid "Interface"
msgstr "Interfaz"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:143
msgctxt "@label"
msgid "Language:"
msgstr "Idioma:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:210
msgctxt "@label"
msgid "Currency:"
msgstr "Moneda:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:223
msgctxt "@label"
msgid "Theme:"
msgstr "Tema:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:279
msgctxt "@label"
msgid "You will need to restart the application for these changes to have effect."
msgstr "Tendrá que reiniciar la aplicación para que estos cambios tengan efecto."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:296
msgctxt "@info:tooltip"
msgid "Slice automatically when changing settings."
msgstr "Segmentar automáticamente al cambiar los ajustes."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:304
msgctxt "@option:check"
msgid "Slice automatically"
msgstr "Segmentar automáticamente"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:318
msgctxt "@label"
msgid "Viewport behavior"
msgstr "Comportamiento de la ventanilla"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:326
msgctxt "@info:tooltip"
msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly."
msgstr "Resaltar en rojo las áreas del modelo sin soporte. Sin soporte, estas áreas no se imprimirán correctamente."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:335
msgctxt "@option:check"
msgid "Display overhang"
msgstr "Mostrar voladizos"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:343
msgctxt "@info:tooltip"
msgid "Moves the camera so the model is in the center of the view when a model is selected"
msgstr "Mueve la cámara de manera que el modelo se encuentre en el centro de la vista cuando se selecciona un modelo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348
msgctxt "@action:button"
msgid "Center camera when item is selected"
msgstr "Centrar cámara cuando se selecciona elemento"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:358
msgctxt "@info:tooltip"
msgid "Should the default zoom behavior of cura be inverted?"
msgstr "¿Se debería invertir el comportamiento predeterminado del zoom de cura?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:363
msgctxt "@action:button"
msgid "Invert the direction of camera zoom."
msgstr "Invertir la dirección del zoom de la cámara."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Should zooming move in the direction of the mouse?"
msgstr "¿Debería moverse el zoom en la dirección del ratón?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Zooming towards the mouse is not supported in the orthographic perspective."
msgstr "Hacer zoom en la dirección del ratón no es compatible con la perspectiva ortográfica."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384
msgctxt "@action:button"
msgid "Zoom toward mouse direction"
msgstr "Hacer zoom en la dirección del ratón"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:410
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved so that they no longer intersect?"
msgstr "¿Deben moverse los modelos en la plataforma de modo que no se crucen?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415
msgctxt "@option:check"
msgid "Ensure models are kept apart"
msgstr "Asegúrese de que los modelos están separados"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:424
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved down to touch the build plate?"
msgstr "¿Deben moverse los modelos del área de impresión de modo que no toquen la placa de impresión?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:429
msgctxt "@option:check"
msgid "Automatically drop models to the build plate"
msgstr "Arrastrar modelos a la placa de impresión de forma automática"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441
msgctxt "@info:tooltip"
msgid "Show caution message in g-code reader."
msgstr "Se muestra el mensaje de advertencia en el lector de GCode."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
msgctxt "@option:check"
msgid "Caution message in g-code reader"
msgstr "Mensaje de advertencia en el lector de GCode"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:458
msgctxt "@info:tooltip"
msgid "Should layer be forced into compatibility mode?"
msgstr "¿Debe forzarse el modo de compatibilidad de la capa?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:463
msgctxt "@option:check"
msgid "Force layer view compatibility mode (restart required)"
msgstr "Forzar modo de compatibilidad de la vista de capas (necesario reiniciar)"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:473
+msgctxt "@info:tooltip"
+msgid "Should Cura open at the location it was closed?"
+msgstr "¿Debería abrirse Cura en el lugar donde se cerró?"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:478
+msgctxt "@option:check"
+msgid "Restore window position on start"
+msgstr "Restaurar la posición de la ventana al inicio"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:488
msgctxt "@info:tooltip"
msgid "What type of camera rendering should be used?"
msgstr "¿Qué tipo de renderizado de cámara debería usarse?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495
msgctxt "@window:text"
-msgid "Camera rendering: "
-msgstr "Renderizado de cámara: "
+msgid "Camera rendering:"
+msgstr "Renderizado de cámara:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506
msgid "Perspective"
msgstr "Perspectiva"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507
msgid "Orthographic"
msgstr "Ortográfica"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538
msgctxt "@label"
msgid "Opening and saving files"
msgstr "Abrir y guardar archivos"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:545
msgctxt "@info:tooltip"
msgid "Should models be scaled to the build volume if they are too large?"
msgstr "¿Deben ajustarse los modelos al volumen de impresión si son demasiado grandes?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:550
msgctxt "@option:check"
msgid "Scale large models"
msgstr "Escalar modelos de gran tamaño"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:560
msgctxt "@info:tooltip"
msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?"
msgstr "Un modelo puede mostrarse demasiado pequeño si su unidad son metros en lugar de milímetros, por ejemplo. ¿Deben escalarse estos modelos?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:565
msgctxt "@option:check"
msgid "Scale extremely small models"
msgstr "Escalar modelos demasiado pequeños"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575
msgctxt "@info:tooltip"
msgid "Should models be selected after they are loaded?"
msgstr "¿Se deberían seleccionar los modelos después de haberse cargado?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:580
msgctxt "@option:check"
msgid "Select models when loaded"
msgstr "Seleccionar modelos al abrirlos"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590
msgctxt "@info:tooltip"
msgid "Should a prefix based on the printer name be added to the print job name automatically?"
msgstr "¿Debe añadirse automáticamente un prefijo basado en el nombre de la impresora al nombre del trabajo de impresión?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:595
msgctxt "@option:check"
msgid "Add machine prefix to job name"
msgstr "Agregar prefijo de la máquina al nombre del trabajo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:605
msgctxt "@info:tooltip"
msgid "Should a summary be shown when saving a project file?"
msgstr "¿Mostrar un resumen al guardar un archivo de proyecto?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609
msgctxt "@option:check"
msgid "Show summary dialog when saving project"
msgstr "Mostrar un cuadro de diálogo de resumen al guardar el proyecto"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
msgctxt "@info:tooltip"
msgid "Default behavior when opening a project file"
msgstr "Comportamiento predeterminado al abrir un archivo del proyecto"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:627
msgctxt "@window:text"
msgid "Default behavior when opening a project file: "
msgstr "Comportamiento predeterminado al abrir un archivo del proyecto: "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641
msgctxt "@option:openProject"
msgid "Always ask me this"
msgstr "Preguntar siempre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:642
msgctxt "@option:openProject"
msgid "Always open as a project"
msgstr "Abrir siempre como un proyecto"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:643
msgctxt "@option:openProject"
msgid "Always import models"
msgstr "Importar modelos siempre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:679
msgctxt "@info:tooltip"
msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again."
msgstr "Si ha realizado cambios en un perfil y, a continuación, ha cambiado a otro, aparecerá un cuadro de diálogo que le preguntará si desea guardar o descartar los cambios. También puede elegir el comportamiento predeterminado, así ese cuadro de diálogo no volverá a aparecer."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:52
msgctxt "@label"
msgid "Profiles"
msgstr "Perfiles"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:693
msgctxt "@window:text"
msgid "Default behavior for changed setting values when switching to a different profile: "
msgstr "Comportamiento predeterminado para los valores modificados al cambiar a otro perfil: "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:707
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157
msgctxt "@option:discardOrKeep"
msgid "Always ask me this"
msgstr "Preguntar siempre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708
msgctxt "@option:discardOrKeep"
msgid "Always discard changed settings"
msgstr "Descartar siempre los ajustes modificados"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:709
msgctxt "@option:discardOrKeep"
msgid "Always transfer changed settings to new profile"
msgstr "Transferir siempre los ajustes modificados al nuevo perfil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743
msgctxt "@label"
msgid "Privacy"
msgstr "Privacidad"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:750
msgctxt "@info:tooltip"
msgid "Should Cura check for updates when the program is started?"
msgstr "¿Debe Cura buscar actualizaciones cuando se abre el programa?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:755
msgctxt "@option:check"
msgid "Check for updates on start"
msgstr "Buscar actualizaciones al iniciar"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:765
msgctxt "@info:tooltip"
msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored."
msgstr "¿Deben enviarse datos anónimos sobre la impresión a Ultimaker? Tenga en cuenta que no se envían ni almacenan modelos, direcciones IP ni otra información de identificación personal."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:770
msgctxt "@option:check"
msgid "Send (anonymous) print information"
msgstr "Enviar información (anónima) de impresión"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:779
msgctxt "@action:button"
msgid "More information"
msgstr "Más información"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:774
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:27
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ProfileMenu.qml:23
-msgctxt "@label"
-msgid "Experimental"
-msgstr "Experimental"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781
-msgctxt "@info:tooltip"
-msgid "Use multi build plate functionality"
-msgstr "Utilizar funcionalidad de placa de impresión múltiple"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786
-msgctxt "@option:check"
-msgid "Use multi build plate functionality (restart required)"
-msgstr "Utilizar funcionalidad de placa de impresión múltiple (reinicio requerido)"
-
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415
msgctxt "@title:tab"
@@ -3364,93 +3349,84 @@ msgid "Printers"
msgstr "Impresoras"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152
msgctxt "@action:button"
msgid "Rename"
msgstr "Cambiar nombre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:34
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419
msgctxt "@title:tab"
msgid "Profiles"
msgstr "Perfiles"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:104
msgctxt "@label"
msgid "Create"
msgstr "Crear"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
msgctxt "@label"
msgid "Duplicate"
msgstr "Duplicado"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:202
msgctxt "@title:window"
msgid "Create Profile"
msgstr "Crear perfil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:204
msgctxt "@info"
msgid "Please provide a name for this profile."
msgstr "Introduzca un nombre para este perfil."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:260
msgctxt "@title:window"
msgid "Duplicate Profile"
msgstr "Duplicar perfil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:291
msgctxt "@title:window"
msgid "Rename Profile"
msgstr "Cambiar nombre de perfil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:304
msgctxt "@title:window"
msgid "Import Profile"
msgstr "Importar perfil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:333
msgctxt "@title:window"
msgid "Export Profile"
msgstr "Exportar perfil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:396
msgctxt "@label %1 is printer name"
msgid "Printer: %1"
msgstr "Impresora: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Default profiles"
-msgstr "Perfiles predeterminados"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Custom profiles"
-msgstr "Perfiles personalizados"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:554
msgctxt "@action:button"
msgid "Update profile with current settings/overrides"
msgstr "Actualizar perfil con ajustes o sobrescrituras actuales"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:561
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:257
msgctxt "@action:button"
msgid "Discard current changes"
msgstr "Descartar cambios actuales"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:580
msgctxt "@action:label"
msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below."
msgstr "Este perfil utiliza los ajustes predeterminados especificados por la impresora, por eso no aparece ningún ajuste o sobrescritura en la lista que se ve a continuación."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:588
msgctxt "@action:label"
msgid "Your current settings match the selected profile."
msgstr "Los ajustes actuales coinciden con el perfil seleccionado."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:606
msgctxt "@title:tab"
msgid "Global Settings"
msgstr "Ajustes globales"
@@ -3515,35 +3491,35 @@ msgstr "Sin título"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:68
msgctxt "@label:textbox"
-msgid "search settings"
-msgstr "buscar ajustes"
+msgid "Search settings"
+msgstr "Buscar ajustes"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:462
msgctxt "@action:menu"
msgid "Copy value to all extruders"
msgstr "Copiar valor en todos los extrusores"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:471
msgctxt "@action:menu"
msgid "Copy all changed values to all extruders"
msgstr "Copiar todos los valores cambiados en todos los extrusores"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:508
msgctxt "@action:menu"
msgid "Hide this setting"
msgstr "Ocultar este ajuste"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:521
msgctxt "@action:menu"
msgid "Don't show this setting"
msgstr "No mostrar este ajuste"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
msgctxt "@action:menu"
msgid "Keep this setting visible"
msgstr "Mostrar este ajuste"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434
msgctxt "@action:menu"
msgid "Configure setting visibility..."
@@ -3575,17 +3551,17 @@ msgctxt "@label Header for list of settings."
msgid "Affected By"
msgstr "Afectado por"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:187
msgctxt "@label"
msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders."
msgstr "Este ajuste siempre se comparte entre extrusores. Si lo modifica, modificará el valor de todos los extrusores."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:191
msgctxt "@label"
msgid "The value is resolved from per-extruder values "
msgstr "El valor se resuelve según los valores de los extrusores. "
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:230
msgctxt "@label"
msgid ""
"This setting has a value that is different from the profile.\n"
@@ -3596,7 +3572,7 @@ msgstr ""
"\n"
"Haga clic para restaurar el valor del perfil."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:329
msgctxt "@label"
msgid ""
"This setting is normally calculated, but it currently has an absolute value set.\n"
@@ -3607,6 +3583,13 @@ msgstr ""
"\n"
"Haga clic para restaurar el valor calculado."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/NoIntentIcon.qml:31
+msgctxt "@label %1 is filled in with the type of a profile. %2 is filled with a list of numbers (eg '1' or '1, 2')"
+msgid "There is no %1 profile for the configuration in extruder %2. The default intent will be used instead"
+msgid_plural "There is no %1 profile for the configurations in extruders %2. The default intent will be used instead"
+msgstr[0] ""
+msgstr[1] ""
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:144
msgctxt "@button"
msgid "Recommended"
@@ -3647,26 +3630,11 @@ msgctxt "@label"
msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards."
msgstr "Habilita la impresión de un borde o una balsa. Esta opción agregará un área plana alrededor del objeto, que es fácil de cortar después."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:175
-msgctxt "@label"
-msgid "Layer Height"
-msgstr "Altura de capa"
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:206
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:81
msgctxt "@tooltip"
msgid "You have modified some profile settings. If you want to change these go to custom mode."
msgstr "Ha modificado algunos ajustes del perfil. Si desea cambiarlos, hágalo en el modo personalizado."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:355
-msgctxt "@tooltip"
-msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
-msgstr "Este perfil de calidad no se encuentra disponible para su configuración de material y tobera actual. Cámbielas para poder habilitar este perfil de calidad."
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449
-msgctxt "@tooltip"
-msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
-msgstr "Hay un perfil personalizado activado en este momento. Para habilitar el control deslizante de calidad, seleccione un perfil de calidad predeterminado en la pestaña Personalizado"
-
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:13
msgctxt "@label:Should be short"
msgid "On"
@@ -3677,12 +3645,17 @@ msgctxt "@label:Should be short"
msgid "Off"
msgstr "Apagado"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:27
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:33
+msgctxt "@label"
+msgid "Experimental"
+msgstr "Experimental"
+
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:47
msgctxt "@label"
msgid "Profile"
msgstr "Perfil"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:94
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:172
msgctxt "@tooltip"
msgid ""
"Some setting/override values are different from the values stored in the profile.\n"
@@ -3693,6 +3666,11 @@ msgstr ""
"\n"
"Haga clic para abrir el administrador de perfiles."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:160
+msgctxt "@label:header"
+msgid "Custom profiles"
+msgstr "Perfiles personalizados"
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:21
msgctxt "@label shown when we load a Gcode file"
msgid "Print setup disabled. G-code file can not be modified."
@@ -3820,11 +3798,16 @@ msgctxt "@label:category menu label"
msgid "Material"
msgstr "Material"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:42
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:46
msgctxt "@label:category menu label"
msgid "Favorites"
msgstr "Favoritos"
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:71
+msgctxt "@label:category menu label"
+msgid "Generic"
+msgstr "Genérico"
+
#: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25
msgctxt "@label:category menu label"
msgid "Network enabled printers"
@@ -3860,16 +3843,6 @@ msgctxt "@action:inmenu"
msgid "Disable Extruder"
msgstr "Deshabilitar extrusor"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63
-msgctxt "@title:menu"
-msgid "&Build plate"
-msgstr "&Placa de impresión"
-
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66
-msgctxt "@title:settings"
-msgid "&Profile"
-msgstr "&Perfil"
-
#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:19
msgctxt "@action:inmenu menubar:view"
msgid "&Camera position"
@@ -3949,12 +3922,12 @@ msgctxt "@header"
msgid "Configurations"
msgstr "Configuraciones"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:110
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:112
msgctxt "@label"
msgid "Select configuration"
msgstr "Seleccionar configuración"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:223
msgctxt "@label"
msgid "Configurations"
msgstr "Configuraciones"
@@ -3984,12 +3957,12 @@ msgctxt "@label"
msgid "Enabled"
msgstr "Habilitado"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:251
msgctxt "@label"
msgid "Material"
msgstr "Material"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:375
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:378
msgctxt "@label"
msgid "Use glue for better adhesion with this material combination."
msgstr "Utilice pegamento con esta combinación de materiales para lograr una mejor adhesión."
@@ -4406,44 +4379,44 @@ msgctxt "@title:tab"
msgid "Settings"
msgstr "Ajustes"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538
msgctxt "@title:window"
msgid "Closing Cura"
msgstr "Cerrando Cura"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551
msgctxt "@label"
msgid "Are you sure you want to exit Cura?"
msgstr "¿Seguro que desea salir de Cura?"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:589
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19
msgctxt "@title:window"
msgid "Open file(s)"
msgstr "Abrir archivo(s)"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:695
msgctxt "@window:title"
msgid "Install Package"
msgstr "Instalar paquete"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:703
msgctxt "@title:window"
msgid "Open File(s)"
msgstr "Abrir archivo(s)"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:706
msgctxt "@text:window"
msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one."
msgstr "Hemos encontrado uno o más archivos de GCode entre los archivos que ha seleccionado. Solo puede abrir los archivos GCode de uno en uno. Si desea abrir un archivo GCode, seleccione solo uno."
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:809
msgctxt "@title:window"
msgid "Add Printer"
msgstr "Agregar impresora"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:817
msgctxt "@title:window"
msgid "What's New"
msgstr "Novedades"
@@ -4514,17 +4487,17 @@ msgctxt "@title:window"
msgid "About Cura"
msgstr "Acerca de Cura"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:56
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:57
msgctxt "@label"
msgid "version: %1"
msgstr "versión: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:72
msgctxt "@label"
msgid "End-to-end solution for fused filament 3D printing."
msgstr "Solución completa para la impresión 3D de filamento fundido."
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:84
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:85
msgctxt "@info:credit"
msgid ""
"Cura is developed by Ultimaker B.V. in cooperation with the community.\n"
@@ -4533,122 +4506,122 @@ msgstr ""
"Ultimaker B.V. ha desarrollado Cura en cooperación con la comunidad.\n"
"Cura se enorgullece de utilizar los siguientes proyectos de código abierto:"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
msgctxt "@label"
msgid "Graphical user interface"
msgstr "Interfaz gráfica de usuario (GUI)"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
msgctxt "@label"
msgid "Application framework"
msgstr "Entorno de la aplicación"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
msgctxt "@label"
msgid "G-code generator"
msgstr "Generador de GCode"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:138
msgctxt "@label"
msgid "Interprocess communication library"
msgstr "Biblioteca de comunicación entre procesos"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:139
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
msgctxt "@label"
msgid "Programming language"
msgstr "Lenguaje de programación"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
msgctxt "@label"
msgid "GUI framework"
msgstr "Entorno de la GUI"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
msgctxt "@label"
msgid "GUI framework bindings"
msgstr "Enlaces del entorno de la GUI"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
msgctxt "@label"
msgid "C/C++ Binding library"
msgstr "Biblioteca de enlaces C/C++"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
msgctxt "@label"
msgid "Data interchange format"
msgstr "Formato de intercambio de datos"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
msgctxt "@label"
msgid "Support library for scientific computing"
msgstr "Biblioteca de apoyo para cálculos científicos"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
msgctxt "@label"
msgid "Support library for faster math"
msgstr "Biblioteca de apoyo para cálculos más rápidos"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
msgctxt "@label"
msgid "Support library for handling STL files"
msgstr "Biblioteca de apoyo para gestionar archivos STL"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
msgctxt "@label"
msgid "Support library for handling planar objects"
msgstr "Biblioteca de compatibilidad para trabajar con objetos planos"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
msgctxt "@label"
msgid "Support library for handling triangular meshes"
msgstr "Biblioteca de compatibilidad para trabajar con mallas triangulares"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
msgctxt "@label"
msgid "Support library for analysis of complex networks"
msgstr "Biblioteca de compatibilidad para analizar redes complejas"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
msgctxt "@label"
msgid "Support library for handling 3MF files"
msgstr "Biblioteca de compatibilidad para trabajar con archivos 3MF"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
msgctxt "@label"
msgid "Support library for file metadata and streaming"
msgstr "Biblioteca de compatibilidad para metadatos y transmisión de archivos"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
msgctxt "@label"
msgid "Serial communication library"
msgstr "Biblioteca de comunicación en serie"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
msgctxt "@label"
msgid "ZeroConf discovery library"
msgstr "Biblioteca de detección para Zeroconf"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
msgctxt "@label"
msgid "Polygon clipping library"
msgstr "Biblioteca de recorte de polígonos"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:156
msgctxt "@Label"
msgid "Python HTTP library"
msgstr "Biblioteca HTTP de Python"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:157
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
msgctxt "@label"
msgid "Font"
msgstr "Fuente"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
msgctxt "@label"
msgid "SVG icons"
msgstr "Iconos SVG"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:160
msgctxt "@label"
msgid "Linux cross-distribution application deployment"
msgstr "Implementación de la aplicación de distribución múltiple de Linux"
@@ -4668,32 +4641,27 @@ msgctxt "@title:window"
msgid "Save Project"
msgstr "Guardar proyecto"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149
-msgctxt "@action:label"
-msgid "Build plate"
-msgstr "Placa de impresión"
-
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:177
msgctxt "@action:label"
msgid "Extruder %1"
msgstr "Extrusor %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:192
msgctxt "@action:label"
msgid "%1 & material"
msgstr "%1 y material"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:194
msgctxt "@action:label"
msgid "Material"
msgstr "Material"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
msgctxt "@action:label"
msgid "Don't show project summary on save again"
msgstr "No mostrar resumen de proyecto al guardar de nuevo"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:302
msgctxt "@action:button"
msgid "Save"
msgstr "Guardar"
@@ -4869,12 +4837,12 @@ msgctxt "@label"
msgid "Troubleshooting"
msgstr "Solución de problemas"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:211
msgctxt "@label"
msgid "Printer name"
msgstr "Nombre de la impresora"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:224
msgctxt "@text"
msgid "Please give your printer a name"
msgstr "Indique un nombre para su impresora"
@@ -4933,6 +4901,31 @@ msgctxt "@button"
msgid "Get started"
msgstr "Empezar"
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:27
+msgctxt "@info:tooltip"
+msgid "3D View"
+msgstr "Vista en 3D"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:40
+msgctxt "@info:tooltip"
+msgid "Front View"
+msgstr "Vista frontal"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:53
+msgctxt "@info:tooltip"
+msgid "Top View"
+msgstr "Vista superior"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:66
+msgctxt "@info:tooltip"
+msgid "Left View"
+msgstr "Vista del lado izquierdo"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:79
+msgctxt "@info:tooltip"
+msgid "Right View"
+msgstr "Vista del lado derecho"
+
#: MachineSettingsAction/plugin.json
msgctxt "description"
msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)."
@@ -4993,16 +4986,6 @@ msgctxt "name"
msgid "Model Checker"
msgstr "Comprobador de modelos"
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "description"
-msgid "Dump the contents of all settings to a HTML file."
-msgstr "Vuelva el contenido de todas las configuraciones en un archivo HTML."
-
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "name"
-msgid "God Mode"
-msgstr "God Mode"
-
#: FirmwareUpdater/plugin.json
msgctxt "description"
msgid "Provides a machine actions for updating firmware."
@@ -5013,16 +4996,6 @@ msgctxt "name"
msgid "Firmware Updater"
msgstr "Actualizador de firmware"
-#: ProfileFlattener/plugin.json
-msgctxt "description"
-msgid "Create a flattened quality changes profile."
-msgstr "Crear un perfil de cambios de calidad aplanado."
-
-#: ProfileFlattener/plugin.json
-msgctxt "name"
-msgid "Profile Flattener"
-msgstr "Aplanador de perfil"
-
#: AMFReader/plugin.json
msgctxt "description"
msgid "Provides support for reading AMF files."
@@ -5223,6 +5196,16 @@ msgctxt "name"
msgid "Version Upgrade 3.3 to 3.4"
msgstr "Actualización de la versión 3.3 a la 3.4"
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "description"
+msgid "Upgrades configurations from Cura 4.3 to Cura 4.4."
+msgstr "Actualiza la configuración de Cura 4.3 a Cura 4.4."
+
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "name"
+msgid "Version Upgrade 4.3 to 4.4"
+msgstr "Actualización de la versión 4.3 a la 4.4"
+
#: VersionUpgrade/VersionUpgrade25to26/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 2.5 to Cura 2.6."
@@ -5423,16 +5406,6 @@ msgctxt "name"
msgid "Cura Profile Writer"
msgstr "Escritor de perfiles de Cura"
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "description"
-msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
-msgstr "Permite a los fabricantes de material crear nuevos perfiles de material y calidad mediante una IU integrada."
-
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "name"
-msgid "Print Profile Assistant"
-msgstr "Imprimir asistente del perfil"
-
#: 3MFWriter/plugin.json
msgctxt "description"
msgid "Provides support for writing 3MF files."
@@ -5473,6 +5446,158 @@ msgctxt "name"
msgid "Cura Profile Reader"
msgstr "Lector de perfiles de Cura"
+#~ msgctxt "@item:inmenu"
+#~ msgid "Flatten active settings"
+#~ msgstr "Aplanar ajustes activos"
+
+#~ msgctxt "@info:status"
+#~ msgid "Profile has been flattened & activated."
+#~ msgstr "El perfil se ha aplanado y activado."
+
+#~ msgctxt "X3g Writer Plugin Description"
+#~ msgid "Writes X3g to files"
+#~ msgstr "Escribe X3g en archivos"
+
+#~ msgctxt "X3g Writer File Description"
+#~ msgid "X3g File"
+#~ msgstr "Archivo X3g"
+
+#~ msgctxt "X3G Writer File Description"
+#~ msgid "X3G File"
+#~ msgstr "Archivo X3G"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Open Compressed Triangle Mesh"
+#~ msgstr ""
+
+#~ msgctxt "@item:inmenu"
+#~ msgid "Profile Assistant"
+#~ msgstr "Asistente del perfil"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Profile Assistant"
+#~ msgstr "Asistente del perfil"
+
+#~ msgctxt "@action:button"
+#~ msgid "Retry"
+#~ msgstr "Volver a intentar"
+
+#~ msgctxt "@label:table_header"
+#~ msgid "Print Core"
+#~ msgstr "Print core"
+
+#~ msgctxt "@label"
+#~ msgid "Don't support overlap with other models"
+#~ msgstr "No crear soporte en otros modelos (por superposición)"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for overlap with other models"
+#~ msgstr "Modificar ajustes de otros modelos (por superposición)"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for infill of other models"
+#~ msgstr "Modificar ajustes del relleno de otros modelos"
+
+#~ msgctxt "@action:ComboBox option"
+#~ msgid "Update existing"
+#~ msgstr "Actualizar existente"
+
+#~ msgctxt "@label"
+#~ msgid "Not supported"
+#~ msgstr "No compatible"
+
+#~ msgctxt "@action:button"
+#~ msgid "Previous"
+#~ msgstr "Anterior"
+
+#~ msgctxt "@label"
+#~ msgid "Tip"
+#~ msgstr "Consejo"
+
+#~ msgctxt "@label"
+#~ msgid "Print experiment"
+#~ msgstr "Ensayo de impresión"
+
+#~ msgctxt "@label"
+#~ msgid "Checklist"
+#~ msgstr "Lista de verificación"
+
+#~ msgctxt "@label"
+#~ msgid "Please select any upgrades made to this Ultimaker 2."
+#~ msgstr "Seleccione cualquier actualización de este Ultimaker 2."
+
+#~ msgctxt "@label"
+#~ msgid "Olsson Block"
+#~ msgstr "Bloque Olsson"
+
+#~ msgctxt "@window:text"
+#~ msgid "Camera rendering: "
+#~ msgstr "Renderizado de cámara: "
+
+#~ msgctxt "@info:tooltip"
+#~ msgid "Use multi build plate functionality"
+#~ msgstr "Utilizar funcionalidad de placa de impresión múltiple"
+
+#~ msgctxt "@option:check"
+#~ msgid "Use multi build plate functionality (restart required)"
+#~ msgstr "Utilizar funcionalidad de placa de impresión múltiple (reinicio requerido)"
+
+#~ msgctxt "@label"
+#~ msgid "Default profiles"
+#~ msgstr "Perfiles predeterminados"
+
+#~ msgctxt "@label:textbox"
+#~ msgid "search settings"
+#~ msgstr "buscar ajustes"
+
+#~ msgctxt "@label"
+#~ msgid "Layer Height"
+#~ msgstr "Altura de capa"
+
+#~ msgctxt "@tooltip"
+#~ msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
+#~ msgstr "Este perfil de calidad no se encuentra disponible para su configuración de material y tobera actual. Cámbielas para poder habilitar este perfil de calidad."
+
+#~ msgctxt "@tooltip"
+#~ msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
+#~ msgstr "Hay un perfil personalizado activado en este momento. Para habilitar el control deslizante de calidad, seleccione un perfil de calidad predeterminado en la pestaña Personalizado"
+
+#~ msgctxt "@title:menu"
+#~ msgid "&Build plate"
+#~ msgstr "&Placa de impresión"
+
+#~ msgctxt "@title:settings"
+#~ msgid "&Profile"
+#~ msgstr "&Perfil"
+
+#~ msgctxt "@action:label"
+#~ msgid "Build plate"
+#~ msgstr "Placa de impresión"
+
+#~ msgctxt "description"
+#~ msgid "Dump the contents of all settings to a HTML file."
+#~ msgstr "Vuelva el contenido de todas las configuraciones en un archivo HTML."
+
+#~ msgctxt "name"
+#~ msgid "God Mode"
+#~ msgstr "God Mode"
+
+#~ msgctxt "description"
+#~ msgid "Create a flattened quality changes profile."
+#~ msgstr "Crear un perfil de cambios de calidad aplanado."
+
+#~ msgctxt "name"
+#~ msgid "Profile Flattener"
+#~ msgstr "Aplanador de perfil"
+
+#~ msgctxt "description"
+#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
+#~ msgstr "Permite a los fabricantes de material crear nuevos perfiles de material y calidad mediante una IU integrada."
+
+#~ msgctxt "name"
+#~ msgid "Print Profile Assistant"
+#~ msgstr "Imprimir asistente del perfil"
+
#~ msgctxt "@info:status"
#~ msgid "Connected over the network."
#~ msgstr "Conectado a través de la red."
diff --git a/resources/i18n/es_ES/fdmextruder.def.json.po b/resources/i18n/es_ES/fdmextruder.def.json.po
index db1bfea9d8..5d849cfc50 100644
--- a/resources/i18n/es_ES/fdmextruder.def.json.po
+++ b/resources/i18n/es_ES/fdmextruder.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-03-13 14:00+0200\n"
"Last-Translator: Bothof \n"
"Language-Team: Spanish\n"
diff --git a/resources/i18n/es_ES/fdmprinter.def.json.po b/resources/i18n/es_ES/fdmprinter.def.json.po
index b6c8b1fbf1..fbaf241481 100644
--- a/resources/i18n/es_ES/fdmprinter.def.json.po
+++ b/resources/i18n/es_ES/fdmprinter.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-07-29 15:51+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: Spanish , Spanish \n"
@@ -1030,6 +1030,17 @@ msgctxt "bottom_layers description"
msgid "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number."
msgstr "Número de capas inferiores. Al calcularlo por el grosor inferior, este valor se redondea a un número entero."
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers label"
+msgid "Initial Bottom Layers"
+msgstr "Capas inferiores iniciales"
+
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers description"
+msgid "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number."
+msgstr "El número de capas inferiores iniciales, desde la capa de impresión hacia arriba. Al calcularlo por el grosor inferior, este valor se redondea a un número"
+" entero."
+
#: fdmprinter.def.json
msgctxt "top_bottom_pattern label"
msgid "Top/Bottom Pattern"
@@ -1423,8 +1434,7 @@ msgstr "Habilitar alisado"
#: fdmprinter.def.json
msgctxt "ironing_enabled description"
msgid "Go over the top surface one additional time, but this time extruding very little material. This is meant to melt the plastic on top further, creating a smoother surface. The pressure in the nozzle chamber is kept high so that the creases in the surface are filled with material."
-msgstr "Pasar por la superficie superior una vez más, pero esta vez extruyendo muy poco material, para derretir la capa superior del plástico y crear una superficie"
-" más lisa. La presión de la cámara en la boquilla se mantiene alta para que los pliegues de la superficie se llenen de material."
+msgstr "Pasar por la superficie superior una vez más, pero esta vez extruyendo muy poco material, para derretir la capa superior del plástico y crear una superficie más lisa. La presión de la cámara en la boquilla se mantiene alta para que los pliegues de la superficie se llenen de material."
#: fdmprinter.def.json
msgctxt "ironing_only_highest_layer label"
@@ -3568,9 +3578,7 @@ msgstr "Dirección de línea de relleno de soporte"
#: fdmprinter.def.json
msgctxt "support_infill_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angle 0 degrees."
-msgstr "Una lista de los valores enteros de las direcciones de línea que se van a utilizar. Los elementos de la lista se usan secuencialmente a medida que avanzan"
-" las capas y cuando se alcanza el final de la lista, comienza de nuevo desde el principio. Los elementos de la lista están separados por comas y toda la"
-" lista aparece entre corchetes. El valor predeterminado es una lista vacía, lo que significa que se usa el ángulo predeterminado de 0 grados."
+msgstr "Una lista de los valores enteros de las direcciones de línea que se van a utilizar. Los elementos de la lista se usan secuencialmente a medida que avanzan las capas y cuando se alcanza el final de la lista, comienza de nuevo desde el principio. Los elementos de la lista están separados por comas y toda la lista aparece entre corchetes. El valor predeterminado es una lista vacía, lo que significa que se usa el ángulo predeterminado de 0 grados."
#: fdmprinter.def.json
msgctxt "support_brim_enable label"
@@ -3984,8 +3992,9 @@ msgstr "Área de la interfaz de soporte mínima"
#: fdmprinter.def.json
msgctxt "minimum_interface_area description"
-msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
-msgstr "Tamaño del área mínima para los polígonos de la interfaz de soporte. No se generarán polígonos que posean un área de menor tamaño que este valor."
+msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Tamaño del área mínima para los polígonos de la interfaz de soporte. Los polígonos que posean un área de menor tamaño que este valor se imprimirán como"
+" soporte normal."
#: fdmprinter.def.json
msgctxt "minimum_roof_area label"
@@ -3994,8 +4003,8 @@ msgstr "Área de los techos del soporte mínima"
#: fdmprinter.def.json
msgctxt "minimum_roof_area description"
-msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "Tamaño del área mínima para los techos del soporte. No se generarán polígonos que posean un área de menor tamaño que este valor."
+msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Tamaño del área mínima para los techos del soporte. Los polígonos que posean un área de menor tamaño que este valor se imprimirán como soporte normal."
#: fdmprinter.def.json
msgctxt "minimum_bottom_area label"
@@ -4004,8 +4013,8 @@ msgstr "Área de los suelos del soporte mínima"
#: fdmprinter.def.json
msgctxt "minimum_bottom_area description"
-msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "Tamaño del área mínima para los suelos del soporte. No se generarán polígonos que posean un área de menor tamaño que este valor."
+msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Tamaño del área mínima para los suelos del soporte. Los polígonos que posean un área de menor tamaño que este valor se imprimirán como soporte normal."
#: fdmprinter.def.json
msgctxt "support_interface_offset label"
@@ -4045,10 +4054,7 @@ msgstr "Direcciones de línea de interfaz de soporte"
#: fdmprinter.def.json
msgctxt "support_interface_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Una lista de los valores enteros de las direcciones de línea que se van a utilizar. Los elementos de la lista se usan secuencialmente a medida que avanzan"
-" las capas y cuando se alcanza el final de la lista, comienza de nuevo desde el principio. Los elementos de la lista están separados por comas y toda la"
-" lista aparece entre corchetes. El valor predeterminado es una lista vacía, lo que significa que se utilizan los ángulos estándar (que varían entre 45"
-" y 135 grados si las interfaces son bastante gruesas o de 90 grados en otro caso)."
+msgstr "Una lista de los valores enteros de las direcciones de línea que se van a utilizar. Los elementos de la lista se usan secuencialmente a medida que avanzan las capas y cuando se alcanza el final de la lista, comienza de nuevo desde el principio. Los elementos de la lista están separados por comas y toda la lista aparece entre corchetes. El valor predeterminado es una lista vacía, lo que significa que se utilizan los ángulos estándar (que varían entre 45 y 135 grados si las interfaces son bastante gruesas o de 90 grados en otro caso)."
#: fdmprinter.def.json
msgctxt "support_roof_angles label"
@@ -4058,10 +4064,7 @@ msgstr "Direcciones de línea del techo de soporte"
#: fdmprinter.def.json
msgctxt "support_roof_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Una lista de los valores enteros de las direcciones de línea que se van a utilizar. Los elementos de la lista se usan secuencialmente a medida que avanzan"
-" las capas y cuando se alcanza el final de la lista, comienza de nuevo desde el principio. Los elementos de la lista están separados por comas y toda la"
-" lista aparece entre corchetes. El valor predeterminado es una lista vacía, lo que significa que se utilizan los ángulos estándar (que varían entre 45"
-" y 135 grados si las interfaces son bastante gruesas o de 90 grados en otro caso)."
+msgstr "Una lista de los valores enteros de las direcciones de línea que se van a utilizar. Los elementos de la lista se usan secuencialmente a medida que avanzan las capas y cuando se alcanza el final de la lista, comienza de nuevo desde el principio. Los elementos de la lista están separados por comas y toda la lista aparece entre corchetes. El valor predeterminado es una lista vacía, lo que significa que se utilizan los ángulos estándar (que varían entre 45 y 135 grados si las interfaces son bastante gruesas o de 90 grados en otro caso)."
#: fdmprinter.def.json
msgctxt "support_bottom_angles label"
@@ -4071,10 +4074,7 @@ msgstr "Direcciones de línea del suelo de soporte"
#: fdmprinter.def.json
msgctxt "support_bottom_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Una lista de los valores enteros de las direcciones de línea que se van a utilizar. Los elementos de la lista se usan secuencialmente a medida que avanzan"
-" las capas y cuando se alcanza el final de la lista, comienza de nuevo desde el principio. Los elementos de la lista están separados por comas y toda la"
-" lista aparece entre corchetes. El valor predeterminado es una lista vacía, lo que significa que se utilizan los ángulos estándar (que varían entre 45"
-" y 135 grados si las interfaces son bastante gruesas o de 90 grados en otro caso)."
+msgstr "Una lista de los valores enteros de las direcciones de línea que se van a utilizar. Los elementos de la lista se usan secuencialmente a medida que avanzan las capas y cuando se alcanza el final de la lista, comienza de nuevo desde el principio. Los elementos de la lista están separados por comas y toda la lista aparece entre corchetes. El valor predeterminado es una lista vacía, lo que significa que se utilizan los ángulos estándar (que varían entre 45 y 135 grados si las interfaces son bastante gruesas o de 90 grados en otro caso)."
#: fdmprinter.def.json
msgctxt "support_fan_enable label"
@@ -4800,6 +4800,36 @@ msgctxt "remove_empty_first_layers description"
msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle."
msgstr "Eliminar (si las hubiera) las capas vacías por debajo de la primera capa impresa. Deshabilitar este ajuste puede hacer que aparezcan primeras capas vacías si el ajuste de tolerancia de segmentación está establecido en Exclusiva o Medio."
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution label"
+msgid "Maximum Resolution"
+msgstr "Resolución máxima"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution description"
+msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
+msgstr "El tamaño mínimo de un segmento de línea tras la segmentación. Si se aumenta, la resolución de la malla será menor. Esto puede permitir a la impresora mantener la velocidad que necesita para procesar GCode y aumentará la velocidad de segmentación al eliminar detalles de la malla que, de todas formas, no puede procesar."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution label"
+msgid "Maximum Travel Resolution"
+msgstr "Resolución de desplazamiento máximo"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution description"
+msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
+msgstr "El tamaño mínimo de un segmento de línea de desplazamiento tras la segmentación. Si se aumenta, los movimientos de desplazamiento tendrán esquinas menos suavizadas. Esto puede le permite a la impresora mantener la velocidad que necesita para procesar GCode pero puede ocasionar que evitar el modelo sea menos preciso."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation label"
+msgid "Maximum Deviation"
+msgstr "Desviación máxima"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation description"
+msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
+msgstr "La desviación máxima permitida al reducir la resolución en el ajuste de la resolución máxima. Si se aumenta el valor, la impresión será menos precisa pero el GCode será más pequeño. La desviación máxima es un límite para la resolución máxima, por lo que si las dos entran en conflicto, la desviación máxima siempre tendrá prioridad."
+
#: fdmprinter.def.json
msgctxt "blackmagic label"
msgid "Special Modes"
@@ -5175,38 +5205,6 @@ msgctxt "minimum_polygon_circumference description"
msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details."
msgstr "Se filtran los polígonos en capas segmentadas que tienen una circunferencia más pequeña que esta. Los valores más pequeños suponen una resolución de malla mayor a costa de un tiempo de segmentación. Está indicado, sobre todo, para impresoras SLA y modelos 3D muy pequeños con muchos detalles."
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution label"
-msgid "Maximum Resolution"
-msgstr "Resolución máxima"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution description"
-msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
-msgstr "El tamaño mínimo de un segmento de línea tras la segmentación. Si se aumenta, la resolución de la malla será menor. Esto puede permitir a la impresora mantener la velocidad que necesita para procesar GCode y aumentará la velocidad de segmentación al eliminar detalles de la malla que, de todas formas, no puede procesar."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution label"
-msgid "Maximum Travel Resolution"
-msgstr "Resolución de desplazamiento máximo"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution description"
-msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
-msgstr "El tamaño mínimo de un segmento de línea de desplazamiento tras la segmentación. Si se aumenta, los movimientos de desplazamiento tendrán esquinas menos suavizadas. Esto puede le permite a la impresora mantener la velocidad que necesita para procesar GCode pero puede ocasionar que evitar el modelo sea menos preciso."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation label"
-msgid "Maximum Deviation"
-msgstr "Desviación máxima"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation description"
-msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
-msgstr "La desviación máxima permitida al reducir la resolución en el ajuste de la resolución máxima. Si se aumenta el valor, la impresión será menos precisa pero"
-" el GCode será más pequeño. La desviación máxima es un límite para la resolución máxima, por lo que si las dos entran en conflicto, la desviación máxima"
-" siempre tendrá prioridad."
-
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
msgid "Break Up Support In Chunks"
@@ -5347,16 +5345,6 @@ msgctxt "coasting_speed description"
msgid "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops."
msgstr "Velocidad a la que se desplaza durante el depósito por inercia con relación a la velocidad de la trayectoria de extrusión. Se recomienda un valor ligeramente por debajo del 100%, ya que la presión en el tubo guía disminuye durante el movimiento depósito por inercia."
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation label"
-msgid "Alternate Skin Rotation"
-msgstr "Alternar la rotación del forro"
-
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation description"
-msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
-msgstr "Alterna la dirección en la que se imprimen las capas superiores/inferiores. Normalmente, se imprimen únicamente en diagonal. Este ajuste añade las direcciones solo X y solo Y."
-
#: fdmprinter.def.json
msgctxt "cross_infill_pocket_size label"
msgid "Cross 3D Pocket Size"
@@ -5529,23 +5517,24 @@ msgstr "Distancia media entre los puntos aleatorios introducidos en cada segment
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset label"
-msgid "Flow rate compensation max extrusion offset"
+msgid "Flow Rate Compensation Max Extrusion Offset"
msgstr "Desplazamiento de extrusión máximo del factor de compensación del caudal"
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset description"
-msgid "The maximum distance in mm to compensate."
-msgstr "Distancia máxima en mm que se va a compensar."
+msgid "The maximum distance in mm to move the filament to compensate for changes in flow rate."
+msgstr "La distancia máxima en mm para mover el filamento con el fin de compensar los cambios en el caudal."
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor label"
-msgid "Flow rate compensation factor"
+msgid "Flow Rate Compensation Factor"
msgstr "Factor de compensación del caudal"
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor description"
-msgid "The multiplication factor for the flow rate -> distance translation."
-msgstr "La multiplicación factor por caudal da como resultado la conversión de distancia."
+msgid "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."
+msgstr "La distancia para mover el filamento con el fin de compensar los cambios en el caudal, como porcentaje de la distancia a la que se movería el filamento"
+" en un segundo de extrusión."
#: fdmprinter.def.json
msgctxt "wireframe_enabled label"
@@ -5838,13 +5827,14 @@ msgstr "La diferencia de altura de la siguiente altura de capa en comparación c
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold label"
-msgid "Adaptive Layers Threshold"
-msgstr "Umbral de las capas de adaptación"
+msgid "Adaptive Layers Topography Size"
+msgstr "Tamaño de la topografía de las capas de adaptación"
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold description"
-msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
-msgstr "Umbral para usar o no una capa más pequeña. Este número se compara con el curtido de la pendiente más empinada de una capa."
+msgid "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."
+msgstr "Distancia horizontal objetivo entre dos capas adyacentes. Si se reduce este ajuste, se tendrán que utilizar capas más finas para acercar más los bordes"
+" de las capas."
#: fdmprinter.def.json
msgctxt "wall_overhang_angle label"
@@ -5853,8 +5843,9 @@ msgstr "Ángulo de voladizo de pared"
#: fdmprinter.def.json
msgctxt "wall_overhang_angle description"
-msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
-msgstr "Las paredes con un ángulo de voladizo mayor que este se imprimirán con los ajustes de voladizo de pared. Cuando el valor sea 90, no se aplicará la condición de voladizo a la pared."
+msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging. Overhang that gets supported by support will not be treated as overhang either."
+msgstr "Las paredes con un ángulo de voladizo mayor que este se imprimirán con los ajustes de voladizo de pared. Cuando el valor sea 90, no se aplicará la condición"
+" de voladizo a la pared. El voladizo que se apoya en el soporte tampoco se tratará como voladizo."
#: fdmprinter.def.json
msgctxt "wall_overhang_speed_factor label"
@@ -6233,17 +6224,17 @@ msgstr "Velocidad de pequeñas partes"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor description"
-msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
msgstr "Las pequeñas partes se imprimirán a este porcentaje de su velocidad de impresión normal. Una impresión más lenta puede mejorar la adhesión y la precisión."
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 label"
-msgid "First Layer Speed"
-msgstr "Velocidad de primera capa"
+msgid "Small Feature Initial Layer Speed"
+msgstr "Velocidad de la capa inicial de partes pequeñas"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 description"
-msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
msgstr "Las pequeñas partes de la primera capa se imprimirán a este porcentaje de su velocidad de impresión normal. Una impresión más lenta puede mejorar la adhesión"
" y la precisión."
@@ -6307,6 +6298,66 @@ msgctxt "mesh_rotation_matrix description"
msgid "Transformation matrix to be applied to the model when loading it from file."
msgstr "Matriz de transformación que se aplicará al modelo cuando se cargue desde el archivo."
+#~ msgctxt "minimum_interface_area description"
+#~ msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Tamaño del área mínima para los polígonos de la interfaz de soporte. No se generarán polígonos que posean un área de menor tamaño que este valor."
+
+#~ msgctxt "minimum_roof_area description"
+#~ msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Tamaño del área mínima para los techos del soporte. No se generarán polígonos que posean un área de menor tamaño que este valor."
+
+#~ msgctxt "minimum_bottom_area description"
+#~ msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Tamaño del área mínima para los suelos del soporte. No se generarán polígonos que posean un área de menor tamaño que este valor."
+
+#~ msgctxt "skin_alternate_rotation label"
+#~ msgid "Alternate Skin Rotation"
+#~ msgstr "Alternar la rotación del forro"
+
+#~ msgctxt "skin_alternate_rotation description"
+#~ msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
+#~ msgstr "Alterna la dirección en la que se imprimen las capas superiores/inferiores. Normalmente, se imprimen únicamente en diagonal. Este ajuste añade las direcciones solo X y solo Y."
+
+#~ msgctxt "flow_rate_max_extrusion_offset label"
+#~ msgid "Flow rate compensation max extrusion offset"
+#~ msgstr "Desplazamiento de extrusión máximo del factor de compensación del caudal"
+
+#~ msgctxt "flow_rate_max_extrusion_offset description"
+#~ msgid "The maximum distance in mm to compensate."
+#~ msgstr "Distancia máxima en mm que se va a compensar."
+
+#~ msgctxt "flow_rate_extrusion_offset_factor label"
+#~ msgid "Flow rate compensation factor"
+#~ msgstr "Factor de compensación del caudal"
+
+#~ msgctxt "flow_rate_extrusion_offset_factor description"
+#~ msgid "The multiplication factor for the flow rate -> distance translation."
+#~ msgstr "La multiplicación factor por caudal da como resultado la conversión de distancia."
+
+#~ msgctxt "adaptive_layer_height_threshold label"
+#~ msgid "Adaptive Layers Threshold"
+#~ msgstr "Umbral de las capas de adaptación"
+
+#~ msgctxt "adaptive_layer_height_threshold description"
+#~ msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
+#~ msgstr "Umbral para usar o no una capa más pequeña. Este número se compara con el curtido de la pendiente más empinada de una capa."
+
+#~ msgctxt "wall_overhang_angle description"
+#~ msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
+#~ msgstr "Las paredes con un ángulo de voladizo mayor que este se imprimirán con los ajustes de voladizo de pared. Cuando el valor sea 90, no se aplicará la condición de voladizo a la pared."
+
+#~ msgctxt "small_feature_speed_factor description"
+#~ msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "Las pequeñas partes se imprimirán a este porcentaje de su velocidad de impresión normal. Una impresión más lenta puede mejorar la adhesión y la precisión."
+
+#~ msgctxt "small_feature_speed_factor_0 label"
+#~ msgid "First Layer Speed"
+#~ msgstr "Velocidad de primera capa"
+
+#~ msgctxt "small_feature_speed_factor_0 description"
+#~ msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "Las pequeñas partes de la primera capa se imprimirán a este porcentaje de su velocidad de impresión normal. Una impresión más lenta puede mejorar la adhesión y la precisión."
+
#~ msgctxt "ironing_enabled description"
#~ msgid "Go over the top surface one additional time, but without extruding material. This is meant to melt the plastic on top further, creating a smoother surface."
#~ msgstr "Pasar por la superficie superior una vez más, pero sin extruir material, para derretir la parte externa del plástico y crear una superficie más lisa."
diff --git a/resources/i18n/fdmextruder.def.json.pot b/resources/i18n/fdmextruder.def.json.pot
index 66f0c71ccc..322be35b57 100644
--- a/resources/i18n/fdmextruder.def.json.pot
+++ b/resources/i18n/fdmextruder.def.json.pot
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Uranium json setting files\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE\n"
diff --git a/resources/i18n/fdmprinter.def.json.pot b/resources/i18n/fdmprinter.def.json.pot
index 5e386628a0..89ff364e2d 100644
--- a/resources/i18n/fdmprinter.def.json.pot
+++ b/resources/i18n/fdmprinter.def.json.pot
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Uranium json setting files\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE\n"
@@ -1121,6 +1121,18 @@ msgid ""
"value is rounded to a whole number."
msgstr ""
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers label"
+msgid "Initial Bottom Layers"
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers description"
+msgid ""
+"The number of initial bottom layers, from the build-plate upwards. When "
+"calculated by the bottom thickness, this value is rounded to a whole number."
+msgstr ""
+
#: fdmprinter.def.json
msgctxt "top_bottom_pattern label"
msgid "Top/Bottom Pattern"
@@ -4567,7 +4579,7 @@ msgstr ""
msgctxt "minimum_interface_area description"
msgid ""
"Minimum area size for support interface polygons. Polygons which have an "
-"area smaller than this value will not be generated."
+"area smaller than this value will be printed as normal support."
msgstr ""
#: fdmprinter.def.json
@@ -4579,7 +4591,7 @@ msgstr ""
msgctxt "minimum_roof_area description"
msgid ""
"Minimum area size for the roofs of the support. Polygons which have an area "
-"smaller than this value will not be generated."
+"smaller than this value will be printed as normal support."
msgstr ""
#: fdmprinter.def.json
@@ -4591,7 +4603,7 @@ msgstr ""
msgctxt "minimum_bottom_area description"
msgid ""
"Minimum area size for the floors of the support. Polygons which have an area "
-"smaller than this value will not be generated."
+"smaller than this value will be printed as normal support."
msgstr ""
#: fdmprinter.def.json
@@ -5518,6 +5530,49 @@ msgid ""
"setting is set to Exclusive or Middle."
msgstr ""
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution label"
+msgid "Maximum Resolution"
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution description"
+msgid ""
+"The minimum size of a line segment after slicing. If you increase this, the "
+"mesh will have a lower resolution. This may allow the printer to keep up "
+"with the speed it has to process g-code and will increase slice speed by "
+"removing details of the mesh that it can't process anyway."
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution label"
+msgid "Maximum Travel Resolution"
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution description"
+msgid ""
+"The minimum size of a travel line segment after slicing. If you increase "
+"this, the travel moves will have less smooth corners. This may allow the "
+"printer to keep up with the speed it has to process g-code, but it may cause "
+"model avoidance to become less accurate."
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation label"
+msgid "Maximum Deviation"
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation description"
+msgid ""
+"The maximum deviation allowed when reducing the resolution for the Maximum "
+"Resolution setting. If you increase this, the print will be less accurate, "
+"but the g-code will be smaller. Maximum Deviation is a limit for Maximum "
+"Resolution, so if the two conflict the Maximum Deviation will always be held "
+"true."
+msgstr ""
+
#: fdmprinter.def.json
msgctxt "blackmagic label"
msgid "Special Modes"
@@ -5982,49 +6037,6 @@ msgid ""
"and very tiny 3D models with a lot of details."
msgstr ""
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution label"
-msgid "Maximum Resolution"
-msgstr ""
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution description"
-msgid ""
-"The minimum size of a line segment after slicing. If you increase this, the "
-"mesh will have a lower resolution. This may allow the printer to keep up "
-"with the speed it has to process g-code and will increase slice speed by "
-"removing details of the mesh that it can't process anyway."
-msgstr ""
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution label"
-msgid "Maximum Travel Resolution"
-msgstr ""
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution description"
-msgid ""
-"The minimum size of a travel line segment after slicing. If you increase "
-"this, the travel moves will have less smooth corners. This may allow the "
-"printer to keep up with the speed it has to process g-code, but it may cause "
-"model avoidance to become less accurate."
-msgstr ""
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation label"
-msgid "Maximum Deviation"
-msgstr ""
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation description"
-msgid ""
-"The maximum deviation allowed when reducing the resolution for the Maximum "
-"Resolution setting. If you increase this, the print will be less accurate, "
-"but the g-code will be smaller. Maximum Deviation is a limit for Maximum "
-"Resolution, so if the two conflict the Maximum Deviation will always be held "
-"true."
-msgstr ""
-
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
msgid "Break Up Support In Chunks"
@@ -6195,19 +6207,6 @@ msgid ""
"coasting move the pressure in the bowden tube drops."
msgstr ""
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation label"
-msgid "Alternate Skin Rotation"
-msgstr ""
-
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation description"
-msgid ""
-"Alternate the direction in which the top/bottom layers are printed. Normally "
-"they are printed diagonally only. This setting adds the X-only and Y-only "
-"directions."
-msgstr ""
-
#: fdmprinter.def.json
msgctxt "cross_infill_pocket_size label"
msgid "Cross 3D Pocket Size"
@@ -6419,22 +6418,27 @@ msgstr ""
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset label"
-msgid "Flow rate compensation max extrusion offset"
+msgid "Flow Rate Compensation Max Extrusion Offset"
msgstr ""
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset description"
-msgid "The maximum distance in mm to compensate."
+msgid ""
+"The maximum distance in mm to move the filament to compensate for changes in "
+"flow rate."
msgstr ""
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor label"
-msgid "Flow rate compensation factor"
+msgid "Flow Rate Compensation Factor"
msgstr ""
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor description"
-msgid "The multiplication factor for the flow rate -> distance translation."
+msgid ""
+"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."
msgstr ""
#: fdmprinter.def.json
@@ -6786,14 +6790,15 @@ msgstr ""
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold label"
-msgid "Adaptive Layers Threshold"
+msgid "Adaptive Layers Topography Size"
msgstr ""
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold description"
msgid ""
-"Threshold whether to use a smaller layer or not. This number is compared to "
-"the tan of the steepest slope in a layer."
+"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."
msgstr ""
#: fdmprinter.def.json
@@ -6805,7 +6810,9 @@ msgstr ""
msgctxt "wall_overhang_angle description"
msgid ""
"Walls that overhang more than this angle will be printed using overhanging "
-"wall settings. When the value is 90, no walls will be treated as overhanging."
+"wall settings. When the value is 90, no walls will be treated as "
+"overhanging. Overhang that gets supported by support will not be treated as "
+"overhang either."
msgstr ""
#: fdmprinter.def.json
@@ -7238,19 +7245,19 @@ msgstr ""
msgctxt "small_feature_speed_factor description"
msgid ""
"Small features will be printed at this percentage of their normal print "
-"speed. Slower printing can help with adhestion and accuracy."
+"speed. Slower printing can help with adhesion and accuracy."
msgstr ""
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 label"
-msgid "First Layer Speed"
+msgid "Small Feature Initial Layer Speed"
msgstr ""
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 description"
msgid ""
"Small features on the first layer will be printed at this percentage of "
-"their normal print speed. Slower printing can help with adhestion and "
+"their normal print speed. Slower printing can help with adhesion and "
"accuracy."
msgstr ""
diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po
index 66d5f9167f..bfc110737f 100644
--- a/resources/i18n/fi_FI/cura.po
+++ b/resources/i18n/fi_FI/cura.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0200\n"
+"POT-Creation-Date: 2019-11-05 13:13+0100\n"
"PO-Revision-Date: 2017-09-27 12:27+0200\n"
"Last-Translator: Bothof \n"
"Language-Team: Finnish\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:30
msgctxt "@action"
msgid "Machine Settings"
msgstr "Laitteen asetukset"
@@ -38,13 +38,13 @@ msgctxt "@item:inlistbox"
msgid "G-code File"
msgstr "GCode-tiedosto"
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:66
msgctxt "@error:not supported"
msgid "GCodeWriter does not support non-text mode."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:72
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:88
msgctxt "@warning:status"
msgid "Please prepare G-code before exporting."
msgstr ""
@@ -54,7 +54,7 @@ msgctxt "@info:title"
msgid "3D Model Assistant"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:90
+#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:92
#, python-brace-format
msgctxt "@info:status"
msgid ""
@@ -69,16 +69,6 @@ msgctxt "@action"
msgid "Update Firmware"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23
-msgctxt "@item:inmenu"
-msgid "Flatten active settings"
-msgstr "Aktivoitujen asetusten tasoitus"
-
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35
-msgctxt "@info:status"
-msgid "Profile has been flattened & activated."
-msgstr "Profiili on tasoitettu ja aktivoitu."
-
#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "AMF File"
@@ -119,21 +109,6 @@ msgctxt "@message"
msgid "Print in Progress"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
-msgctxt "X3g Writer Plugin Description"
-msgid "Writes X3g to files"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21
-msgctxt "X3g Writer File Description"
-msgid "X3g File"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15
-msgctxt "X3G Writer File Description"
-msgid "X3G File"
-msgstr "X3G-tiedosto"
-
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17
#: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17
msgctxt "@item:inlistbox"
@@ -205,9 +180,9 @@ msgid "Could not save to removable drive {0}: {1}"
msgstr "Ei voitu tallentaa siirrettävälle asemalle {0}: {1}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1634
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:139
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:146
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1668
msgctxt "@info:title"
msgid "Error"
msgstr "Virhe"
@@ -237,8 +212,8 @@ msgstr "Poista siirrettävä asema {0}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1624
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1724
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1658
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1758
msgctxt "@info:title"
msgid "Warning"
msgstr "Varoitus"
@@ -270,17 +245,17 @@ msgctxt "@action"
msgid "Connect via Network"
msgstr "Yhdistä verkon kautta"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:57
msgctxt "@action:button Preceded by 'Ready to'."
msgid "Print over network"
msgstr "Tulosta verkon kautta"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:58
msgctxt "@properties:tooltip"
msgid "Print over network"
msgstr "Tulosta verkon kautta"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:59
msgctxt "@info:status"
msgid "Connected over the network"
msgstr ""
@@ -295,6 +270,21 @@ msgctxt "@info:title"
msgid "Print error"
msgstr ""
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:21
+msgctxt "@info:title"
+msgid "New cloud printers found"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:22
+msgctxt "@info:message"
+msgid "New printers have been found connected to your account, you can find them in your list of discovered printers."
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:27
+msgctxt "@info:option_text"
+msgid "Do not show this message again"
+msgstr ""
+
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
@@ -495,7 +485,7 @@ msgid "GIF Image"
msgstr "GIF-kuva"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
-msgctxt "@item:inlistbox"
+msgctxt "@item:inlistbox 'Open' is part of the name of this file format."
msgid "Open Compressed Triangle Mesh"
msgstr ""
@@ -588,12 +578,12 @@ msgctxt "@info:tooltip"
msgid "Configure Per Model Settings"
msgstr "Määritä mallikohtaiset asetukset"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:186
msgctxt "@title:tab"
msgid "Recommended"
msgstr "Suositeltu"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:188
msgctxt "@title:tab"
msgid "Custom"
msgstr "Mukautettu"
@@ -604,19 +594,19 @@ msgctxt "@item:inlistbox"
msgid "3MF File"
msgstr "3MF-tiedosto"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:198
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:651
msgctxt "@label"
msgid "Nozzle"
msgstr "Suutin"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:496
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:499
msgctxt "@info:title"
msgid "Open Project File"
msgstr ""
@@ -696,16 +686,6 @@ msgctxt "@item:inlistbox"
msgid "Cura Profile"
msgstr "Cura-profiili"
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12
-msgctxt "@item:inmenu"
-msgid "Profile Assistant"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:18
-msgctxt "@item:inlistbox"
-msgid "Profile Assistant"
-msgstr ""
-
#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26
msgctxt "@item:inlistbox"
msgid "3MF file"
@@ -726,7 +706,6 @@ msgctxt "@item:inmenu"
msgid "Preview"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:19
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18
msgctxt "@action"
msgid "Select upgrades"
@@ -742,134 +721,148 @@ msgctxt "@info:title"
msgid "Login failed"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:36
msgctxt "@info:not supported profile"
msgid "Not supported"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:55
+msgctxt "@info:No intent profile selected"
+msgid "Default"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:196
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:125
msgctxt "@title:window"
msgid "File Already Exists"
msgstr "Tiedosto on jo olemassa"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:197
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:126
#, python-brace-format
msgctxt "@label Don't translate the XML tag !"
msgid "The file {0} already exists. Are you sure you want to overwrite it?"
msgstr "Tiedosto {0} on jo olemassa. Haluatko varmasti kirjoittaa sen päälle?"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:427
#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:430
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:433
msgctxt "@info:status"
msgid "Invalid file URL:"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:780
msgctxt "@info:message Followed by a list of settings."
msgid "Settings have been changed to match the current availability of extruders:"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:782
msgctxt "@info:title"
msgid "Settings updated"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1334
msgctxt "@info:title"
msgid "Extruder(s) Disabled"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1457
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:99
+#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+msgctxt "@label"
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Failed to export profile to {0}: {1}"
msgstr "Profiilin vienti epäonnistui tiedostoon {0}: {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to export profile to {0}: Writer plugin reported failure."
msgstr "Profiilin vienti epäonnistui tiedostoon {0}: Kirjoitin-lisäosa ilmoitti virheestä."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:149
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Exported profile to {0}"
msgstr "Profiili viety tiedostoon {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150
msgctxt "@info:title"
msgid "Export succeeded"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}: {1}"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:181
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Can't import profile from {0} before a printer is added."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:198
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "No custom profile to import in file {0}"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:202
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}:"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:226
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:236
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "This profile {0} contains incorrect data, could not import it."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:325
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to import profile from {0}:"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:328
#, python-brace-format
msgctxt "@info:status"
msgid "Successfully imported profile {0}"
msgstr "Onnistuneesti tuotu profiili {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:331
#, python-brace-format
msgctxt "@info:status"
msgid "File {0} does not contain any valid profile."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:334
#, python-brace-format
msgctxt "@info:status"
msgid "Profile {0} has an unknown file type or is corrupted."
msgstr "Profiililla {0} on tuntematon tiedostotyyppi tai se on vioittunut."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369
msgctxt "@label"
msgid "Custom profile"
msgstr "Mukautettu profiili"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:385
msgctxt "@info:status"
msgid "Profile is missing a quality type."
msgstr "Profiilista puuttuu laatutyyppi."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:399
#, python-brace-format
msgctxt "@info:status"
msgid "Could not find a quality type {0} for the current configuration."
@@ -935,14 +928,13 @@ msgctxt "@tooltip"
msgid "Other"
msgstr "Muu"
-#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:306
+#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:302
#, python-brace-format
msgctxt "@label"
msgid "Pre-sliced file {0}"
msgstr "Esiviipaloitu tiedosto {0}"
#: /home/ruben/Projects/Cura/cura/UI/WelcomePagesModel.py:56
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:62
msgctxt "@action:button"
msgid "Next"
msgstr ""
@@ -956,9 +948,9 @@ msgstr ""
#: /home/ruben/Projects/Cura/cura/UI/WhatsNewPagesModel.py:17
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:133
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:169
msgctxt "@action:button"
msgid "Close"
msgstr "Sulje"
@@ -973,40 +965,85 @@ msgstr "Lisää"
#: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:18
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:19
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:81
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:352
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:42
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:58
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:149
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:406
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:294
msgctxt "@action:button"
msgid "Cancel"
msgstr "Peruuta"
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:36
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:320
+msgctxt "@label"
+msgid "Default"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:39
+msgctxt "@label"
+msgid "Visual"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:40
+msgctxt "@text"
+msgid "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality."
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:43
+msgctxt "@label"
+msgid "Engineering"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:44
+msgctxt "@text"
+msgid "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances."
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:47
+msgctxt "@label"
+msgid "Draft"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:48
+msgctxt "@text"
+msgid "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction."
+msgstr ""
+
#: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208
msgctxt "@menuitem"
msgid "Not overridden"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:109
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:357
+msgctxt "@label"
+msgid "Custom profiles"
+msgstr "Mukautetut profiilit"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:391
#, python-brace-format
msgctxt "@item:inlistbox"
msgid "All Supported Types ({0})"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:110
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:392
msgctxt "@item:inlistbox"
msgid "All Files (*)"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:213
msgctxt "@label"
-msgid "Unknown"
-msgstr "Tuntematon"
+msgid "Custom Material"
+msgstr "Mukautettu materiaali"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:214
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:205
+msgctxt "@label"
+msgid "Custom"
+msgstr "Mukautettu"
#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116
msgctxt "@label"
@@ -1018,17 +1055,6 @@ msgctxt "@label"
msgid "Available networked printers"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689
-msgctxt "@label"
-msgid "Custom Material"
-msgstr "Mukautettu materiaali"
-
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:690
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:203
-msgctxt "@label"
-msgid "Custom"
-msgstr "Mukautettu"
-
#: /home/ruben/Projects/Cura/cura/BuildVolume.py:90
msgctxt "@info:status"
msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models."
@@ -1064,11 +1090,6 @@ msgctxt "@info"
msgid "Unable to reach the Ultimaker account server."
msgstr ""
-#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202
-msgctxt "@action:button"
-msgid "Retry"
-msgstr "Yritä uudelleen"
-
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70
msgctxt "@message"
msgid "Please give the required permissions when authorizing this application."
@@ -1245,62 +1266,67 @@ msgctxt "@action:button"
msgid "Send report"
msgstr ""
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:513
msgctxt "@info:progress"
msgid "Loading machines..."
msgstr "Ladataan laitteita..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:520
+msgctxt "@info:progress"
+msgid "Setting up preferences..."
+msgstr ""
+
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:824
msgctxt "@info:progress"
msgid "Setting up scene..."
msgstr "Asetetaan näkymää..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:859
msgctxt "@info:progress"
msgid "Loading interface..."
msgstr "Ladataan käyttöliittymää..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1150
#, python-format
msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm."
msgid "%(width).1f x %(depth).1f x %(height).1f mm"
msgstr "%(width).1f x %(depth).1f x %(height).1f mm"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1657
#, python-brace-format
msgctxt "@info:status"
msgid "Only one G-code file can be loaded at a time. Skipped importing {0}"
msgstr "Vain yksi G-code-tiedosto voidaan ladata kerralla. Tiedoston {0} tuonti ohitettiin."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1667
#, python-brace-format
msgctxt "@info:status"
msgid "Can't open any other file if G-code is loading. Skipped importing {0}"
msgstr "Muita tiedostoja ei voida ladata, kun G-code latautuu. Tiedoston {0} tuonti ohitettiin."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1757
msgctxt "@info:status"
msgid "The selected model was too small to load."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:56
msgctxt "@title:label"
msgid "Printer Settings"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70
msgctxt "@label"
msgid "X (Width)"
msgstr "X (leveys)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:76
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:90
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:104
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:206
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:225
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:244
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:74
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:88
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:102
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:203
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:223
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:243
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:265
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:285
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:79
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:93
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:109
@@ -1309,57 +1335,57 @@ msgctxt "@label"
msgid "mm"
msgstr "mm"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84
msgctxt "@label"
msgid "Y (Depth)"
msgstr "Y (syvyys)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98
msgctxt "@label"
msgid "Z (Height)"
msgstr "Z (korkeus)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112
msgctxt "@label"
msgid "Build plate shape"
msgstr "Alustan muoto"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125
msgctxt "@label"
msgid "Origin at center"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137
msgctxt "@label"
msgid "Heated bed"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149
msgctxt "@label"
msgid "Heated build volume"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:161
msgctxt "@label"
msgid "G-code flavor"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:185
msgctxt "@title:label"
msgid "Printhead Settings"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:199
msgctxt "@label"
msgid "X min"
msgstr "X väh."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:219
msgctxt "@label"
msgid "Y min"
msgstr "Y väh."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:239
msgctxt "@label"
msgid "X max"
msgstr "X enint."
@@ -1369,22 +1395,22 @@ msgctxt "@label"
msgid "Y max"
msgstr "Y enint."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:281
msgctxt "@label"
msgid "Gantry Height"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:295
msgctxt "@label"
msgid "Number of Extruders"
msgstr "Suulakkeiden määrä"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:355
msgctxt "@title:label"
msgid "Start G-code"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:366
msgctxt "@title:label"
msgid "End G-code"
msgstr ""
@@ -1463,7 +1489,7 @@ msgstr ""
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:77
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:44
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:89
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417
msgctxt "@title:tab"
msgid "Materials"
@@ -1655,11 +1681,6 @@ msgctxt "@label:table_header"
msgid "Machine"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131
-msgctxt "@label:table_header"
-msgid "Print Core"
-msgstr ""
-
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137
msgctxt "@label:table_header"
msgid "Build Plate"
@@ -1915,9 +1936,9 @@ msgid "Edit"
msgstr "Muokkaa"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:88
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:155
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:138
msgctxt "@action:button"
msgid "Remove"
msgstr "Poista"
@@ -1938,61 +1959,61 @@ msgctxt "@label"
msgid "Type"
msgstr "Tyyppi"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:225
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274
msgctxt "@label"
msgid "Firmware version"
msgstr "Laiteohjelmistoversio"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:239
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:290
msgctxt "@label"
msgid "Address"
msgstr "Osoite"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:263
msgctxt "@label"
msgid "This printer is not set up to host a group of printers."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:267
msgctxt "@label"
msgid "This printer is the host for a group of %1 printers."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:278
msgctxt "@label"
msgid "The printer at this address has not yet responded."
msgstr "Tämän osoitteen tulostin ei ole vielä vastannut."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283
msgctxt "@action:button"
msgid "Connect"
msgstr "Yhdistä"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:296
msgctxt "@title:window"
msgid "Invalid IP address"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146
msgctxt "@text"
msgid "Please enter a valid IP address."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:308
msgctxt "@title:window"
msgid "Printer Address"
msgstr "Tulostimen osoite"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:331
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102
msgctxt "@label"
msgid "Enter the IP address of your printer on the network."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181
msgctxt "@action:button"
@@ -2047,17 +2068,17 @@ msgctxt "@label:status"
msgid "Finishes %1 at %2"
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44
-msgctxt "@action:button"
-msgid "Print"
-msgstr "Tulosta"
-
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:11
msgctxt "@title:window"
msgid "Print over network"
msgstr "Tulosta verkon kautta"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:52
+msgctxt "@action:button"
+msgid "Print"
+msgstr "Tulosta"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:80
msgctxt "@label"
msgid "Printer selection"
msgstr ""
@@ -2404,72 +2425,71 @@ msgctxt "@action:label"
msgid "Smoothing"
msgstr "Tasoitus"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37
-msgctxt "@label"
-msgid "Mesh Type"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68
-msgctxt "@label"
-msgid "Normal model"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75
-msgctxt "@label"
-msgid "Print as support"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83
-msgctxt "@label"
-msgid "Don't support overlap with other models"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91
-msgctxt "@label"
-msgid "Modify settings for overlap with other models"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99
-msgctxt "@label"
-msgid "Modify settings for infill of other models"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:346
-msgctxt "@action:button"
-msgid "Select settings"
-msgstr "Valitse asetukset"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:388
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:13
msgctxt "@title:window"
msgid "Select Settings to Customize for this model"
msgstr "Valitse tätä mallia varten mukautettavat asetukset"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:56
#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:94
msgctxt "@label:textbox"
msgid "Filter..."
msgstr "Suodatin..."
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:70
msgctxt "@label:checkbox"
msgid "Show all"
msgstr "Näytä kaikki"
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:44
+msgctxt "@label"
+msgid "Mesh Type"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:85
+msgctxt "@label"
+msgid "Normal model"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:97
+msgctxt "@label"
+msgid "Print as support"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:109
+msgctxt "@label"
+msgid "Modify settings for overlaps"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:121
+msgctxt "@label"
+msgid "Don't support overlaps"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:145
+msgctxt "@action:checkbox"
+msgid "Infill only"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:368
+msgctxt "@action:button"
+msgid "Select settings"
+msgstr "Valitse asetukset"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:14
msgctxt "@title:window"
msgid "Open Project"
msgstr "Avaa projekti"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:58
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Update/override existing profile"
msgid "Update existing"
-msgstr "Päivitä nykyinen"
+msgstr ""
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:59
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Save settings in a new profile"
msgid "Create new"
-msgstr "Luo uusi"
+msgstr ""
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:73
@@ -2494,6 +2514,11 @@ msgctxt "@action:ComboBox option"
msgid "Update"
msgstr ""
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
+msgctxt "@action:ComboBox option"
+msgid "Create new"
+msgstr "Luo uusi"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:106
msgctxt "@action:label"
@@ -2507,7 +2532,7 @@ msgid "Printer Group"
msgstr ""
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:220
msgctxt "@action:label"
msgid "Profile settings"
msgstr "Profiilin asetukset"
@@ -2518,75 +2543,81 @@ msgid "How should the conflict in the profile be resolved?"
msgstr "Miten profiilin ristiriita pitäisi ratkaista?"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:323
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:244
msgctxt "@action:label"
msgid "Name"
msgstr "Nimi"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261
+msgctxt "@action:label"
+msgid "Intent"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:246
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228
msgctxt "@action:label"
msgid "Not in profile"
msgstr "Ei profiilissa"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:251
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:233
msgctxt "@action:label"
msgid "%1 override"
msgid_plural "%1 overrides"
msgstr[0] "%1 ohitus"
msgstr[1] "%1 ohitusta"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:247
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:262
msgctxt "@action:label"
msgid "Derivative from"
msgstr "Johdettu seuraavista"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:252
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:267
msgctxt "@action:label"
msgid "%1, %2 override"
msgid_plural "%1, %2 overrides"
msgstr[0] "%1, %2 ohitus"
msgstr[1] "%1, %2 ohitusta"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:268
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:283
msgctxt "@action:label"
msgid "Material settings"
msgstr "Materiaaliasetukset"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:284
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:299
msgctxt "@info:tooltip"
msgid "How should the conflict in the material be resolved?"
msgstr "Miten materiaalin ristiriita pitäisi ratkaista?"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:342
msgctxt "@action:label"
msgid "Setting visibility"
msgstr "Asetusten näkyvyys"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:336
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:351
msgctxt "@action:label"
msgid "Mode"
msgstr "Tila"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:367
msgctxt "@action:label"
msgid "Visible settings:"
msgstr "Näkyvät asetukset:"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:372
msgctxt "@action:label"
msgid "%1 out of %2"
msgstr "%1/%2"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:383
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:398
msgctxt "@action:warning"
msgid "Loading a project will clear all models on the build plate."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:401
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:416
msgctxt "@action:button"
msgid "Open"
msgstr "Avaa"
@@ -2693,54 +2724,6 @@ msgctxt "@checkbox:description"
msgid "Automatically create a backup each day that Cura is started."
msgstr ""
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMainSettingsSelector.qml:75
-msgctxt "@label"
-msgid "Not supported"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:35
-msgctxt "@action:button"
-msgid "Previous"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:174
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:159
-msgctxt "@action:button"
-msgid "Export"
-msgstr "Vie"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209
-msgctxt "@label"
-msgid "Tip"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMaterialMenu.qml:20
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66
-msgctxt "@label:category menu label"
-msgid "Generic"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:160
-msgctxt "@label"
-msgid "Print experiment"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:25
-msgctxt "@label"
-msgid "Checklist"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:30
-msgctxt "@label"
-msgid "Please select any upgrades made to this Ultimaker 2."
-msgstr "Valitse tähän Ultimaker 2 -laitteeseen tehdyt päivitykset."
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:44
-msgctxt "@label"
-msgid "Olsson Block"
-msgstr "Olsson Block -lämmitysosa"
-
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:30
msgctxt "@title"
msgid "Build Plate Leveling"
@@ -2826,170 +2809,176 @@ msgctxt "@label"
msgid "Are you sure you want to abort the print?"
msgstr "Haluatko varmasti keskeyttää tulostuksen?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:72
msgctxt "@title"
msgid "Information"
msgstr "Tiedot"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
msgctxt "@title:window"
msgid "Confirm Diameter Change"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:102
msgctxt "@label (%1 is a number)"
msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:128
msgctxt "@label"
msgid "Display Name"
msgstr "Näytä nimi"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:138
msgctxt "@label"
msgid "Brand"
msgstr "Merkki"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:148
msgctxt "@label"
msgid "Material Type"
msgstr "Materiaalin tyyppi"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:158
msgctxt "@label"
msgid "Color"
msgstr "Väri"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:208
msgctxt "@label"
msgid "Properties"
msgstr "Ominaisuudet"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:210
msgctxt "@label"
msgid "Density"
msgstr "Tiheys"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:225
msgctxt "@label"
msgid "Diameter"
msgstr "Läpimitta"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:259
msgctxt "@label"
msgid "Filament Cost"
msgstr "Tulostuslangan hinta"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:276
msgctxt "@label"
msgid "Filament weight"
msgstr "Tulostuslangan paino"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:294
msgctxt "@label"
msgid "Filament length"
msgstr "Tulostuslangan pituus"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:303
msgctxt "@label"
msgid "Cost per Meter"
msgstr "Hinta metriä kohden"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:317
msgctxt "@label"
msgid "This material is linked to %1 and shares some of its properties."
msgstr "Materiaali on linkitetty kohteeseen %1 ja niillä on joitain samoja ominaisuuksia."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:324
msgctxt "@label"
msgid "Unlink Material"
msgstr "Poista materiaalin linkitys"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:335
msgctxt "@label"
msgid "Description"
msgstr "Kuvaus"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:348
msgctxt "@label"
msgid "Adhesion Information"
msgstr "Tarttuvuustiedot"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:374
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19
msgctxt "@label"
msgid "Print settings"
msgstr "Tulostusasetukset"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:108
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:84
msgctxt "@action:button"
msgid "Activate"
msgstr "Aktivoi"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:126
msgctxt "@action:button"
msgid "Create"
msgstr "Luo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:140
msgctxt "@action:button"
msgid "Duplicate"
msgstr "Jäljennös"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:170
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:167
msgctxt "@action:button"
msgid "Import"
msgstr "Tuo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:184
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:179
+msgctxt "@action:button"
+msgid "Export"
+msgstr "Vie"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:233
msgctxt "@action:label"
msgid "Printer"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:297
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:274
msgctxt "@title:window"
msgid "Confirm Remove"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:275
msgctxt "@label (%1 is object name)"
msgid "Are you sure you wish to remove %1? This cannot be undone!"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:322
msgctxt "@title:window"
msgid "Import Material"
msgstr "Tuo materiaali"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:323
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Could not import material %1: %2"
msgstr "Materiaalin tuominen epäonnistui: %1: %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:327
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully imported material %1"
msgstr "Materiaalin tuominen onnistui: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
msgctxt "@title:window"
msgid "Export Material"
msgstr "Vie materiaali"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:357
msgctxt "@info:status Don't translate the XML tags and !"
msgid "Failed to export material to %1: %2"
msgstr "Materiaalin vieminen epäonnistui kohteeseen %1: %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:363
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully exported material to %1"
msgstr "Materiaalin vieminen onnistui kohteeseen %1"
@@ -3004,27 +2993,27 @@ msgctxt "@label:textbox"
msgid "Check all"
msgstr "Tarkista kaikki"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:48
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
msgctxt "@info:status"
msgid "Calculated"
msgstr "Laskettu"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
msgctxt "@title:column"
msgid "Setting"
msgstr "Asetus"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:68
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:82
msgctxt "@title:column"
msgid "Profile"
msgstr "Profiili"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:89
msgctxt "@title:column"
msgid "Current"
msgstr "Nykyinen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:83
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:97
msgctxt "@title:column"
msgid "Unit"
msgstr "Yksikkö"
@@ -3035,307 +3024,301 @@ msgctxt "@title:tab"
msgid "General"
msgstr "Yleiset"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:132
msgctxt "@label"
msgid "Interface"
msgstr "Käyttöliittymä"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:143
msgctxt "@label"
msgid "Language:"
msgstr "Kieli:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:210
msgctxt "@label"
msgid "Currency:"
msgstr "Valuutta:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:223
msgctxt "@label"
msgid "Theme:"
msgstr "Teema:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:279
msgctxt "@label"
msgid "You will need to restart the application for these changes to have effect."
msgstr "Sovellus on käynnistettävä uudelleen, jotta nämä muutokset tulevat voimaan."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:296
msgctxt "@info:tooltip"
msgid "Slice automatically when changing settings."
msgstr "Viipaloi automaattisesti, kun asetuksia muutetaan."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:304
msgctxt "@option:check"
msgid "Slice automatically"
msgstr "Viipaloi automaattisesti"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:318
msgctxt "@label"
msgid "Viewport behavior"
msgstr "Näyttöikkunan käyttäytyminen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:326
msgctxt "@info:tooltip"
msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly."
msgstr "Korosta mallin vailla tukea olevat alueet punaisella. Ilman tukea nämä alueet eivät tulostu kunnolla."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:335
msgctxt "@option:check"
msgid "Display overhang"
msgstr "Näytä uloke"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:343
msgctxt "@info:tooltip"
msgid "Moves the camera so the model is in the center of the view when a model is selected"
msgstr "Siirtää kameraa siten, että valittuna oleva malli on näkymän keskellä."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348
msgctxt "@action:button"
msgid "Center camera when item is selected"
msgstr "Keskitä kamera kun kohde on valittu"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:358
msgctxt "@info:tooltip"
msgid "Should the default zoom behavior of cura be inverted?"
msgstr "Pitääkö Curan oletusarvoinen zoom-toimintatapa muuttaa päinvastaiseksi?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:363
msgctxt "@action:button"
msgid "Invert the direction of camera zoom."
msgstr "Käännä kameran zoomin suunta päinvastaiseksi."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Should zooming move in the direction of the mouse?"
msgstr "Tuleeko zoomauksen siirtyä hiiren suuntaan?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Zooming towards the mouse is not supported in the orthographic perspective."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384
msgctxt "@action:button"
msgid "Zoom toward mouse direction"
msgstr "Zoomaa hiiren suuntaan"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:410
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved so that they no longer intersect?"
msgstr "Pitäisikö alustalla olevia malleja siirtää niin, etteivät ne enää leikkaa toisiaan?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415
msgctxt "@option:check"
msgid "Ensure models are kept apart"
msgstr "Varmista, että mallit ovat erillään"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:424
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved down to touch the build plate?"
msgstr "Pitäisikö tulostusalueella olevia malleja siirtää alas niin, että ne koskettavat tulostusalustaa?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:429
msgctxt "@option:check"
msgid "Automatically drop models to the build plate"
msgstr "Pudota mallit automaattisesti alustalle"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441
msgctxt "@info:tooltip"
msgid "Show caution message in g-code reader."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
msgctxt "@option:check"
msgid "Caution message in g-code reader"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:458
msgctxt "@info:tooltip"
msgid "Should layer be forced into compatibility mode?"
msgstr "Pakotetaanko kerros yhteensopivuustilaan?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:463
msgctxt "@option:check"
msgid "Force layer view compatibility mode (restart required)"
msgstr "Pakota kerrosnäkymän yhteensopivuustila (vaatii uudelleenkäynnistyksen)"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:473
+msgctxt "@info:tooltip"
+msgid "Should Cura open at the location it was closed?"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:478
+msgctxt "@option:check"
+msgid "Restore window position on start"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:488
msgctxt "@info:tooltip"
msgid "What type of camera rendering should be used?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495
msgctxt "@window:text"
-msgid "Camera rendering: "
+msgid "Camera rendering:"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506
msgid "Perspective"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507
msgid "Orthographic"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538
msgctxt "@label"
msgid "Opening and saving files"
msgstr "Tiedostojen avaaminen ja tallentaminen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:545
msgctxt "@info:tooltip"
msgid "Should models be scaled to the build volume if they are too large?"
msgstr "Pitäisikö mallit skaalata tulostustilavuuteen, jos ne ovat liian isoja?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:550
msgctxt "@option:check"
msgid "Scale large models"
msgstr "Skaalaa suuret mallit"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:560
msgctxt "@info:tooltip"
msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?"
msgstr "Malli voi vaikuttaa erittäin pieneltä, jos sen koko on ilmoitettu esimerkiksi metreissä eikä millimetreissä. Pitäisikö nämä mallit suurentaa?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:565
msgctxt "@option:check"
msgid "Scale extremely small models"
msgstr "Skaalaa erittäin pienet mallit"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575
msgctxt "@info:tooltip"
msgid "Should models be selected after they are loaded?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:580
msgctxt "@option:check"
msgid "Select models when loaded"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590
msgctxt "@info:tooltip"
msgid "Should a prefix based on the printer name be added to the print job name automatically?"
msgstr "Pitäisikö tulostustyön nimeen lisätä automaattisesti tulostimen nimeen perustuva etuliite?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:595
msgctxt "@option:check"
msgid "Add machine prefix to job name"
msgstr "Lisää laitteen etuliite työn nimeen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:605
msgctxt "@info:tooltip"
msgid "Should a summary be shown when saving a project file?"
msgstr "Näytetäänkö yhteenveto, kun projektitiedosto tallennetaan?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609
msgctxt "@option:check"
msgid "Show summary dialog when saving project"
msgstr "Näytä yhteenvetoikkuna, kun projekti tallennetaan"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
msgctxt "@info:tooltip"
msgid "Default behavior when opening a project file"
msgstr "Projektitiedoston avaamisen oletustoimintatapa"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:627
msgctxt "@window:text"
msgid "Default behavior when opening a project file: "
msgstr "Projektitiedoston avaamisen oletustoimintatapa: "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641
msgctxt "@option:openProject"
msgid "Always ask me this"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:642
msgctxt "@option:openProject"
msgid "Always open as a project"
msgstr "Avaa aina projektina"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:643
msgctxt "@option:openProject"
msgid "Always import models"
msgstr "Tuo mallit aina"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:679
msgctxt "@info:tooltip"
msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again."
msgstr "Kun olet tehnyt muutokset profiiliin ja vaihtanut toiseen, näytetään valintaikkuna, jossa kysytään, haluatko säilyttää vai hylätä muutokset. Tässä voit myös valita oletuskäytöksen, jolloin valintaikkunaa ei näytetä uudelleen."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:52
msgctxt "@label"
msgid "Profiles"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:693
msgctxt "@window:text"
msgid "Default behavior for changed setting values when switching to a different profile: "
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:707
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157
msgctxt "@option:discardOrKeep"
msgid "Always ask me this"
msgstr "Kysy aina"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708
msgctxt "@option:discardOrKeep"
msgid "Always discard changed settings"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:709
msgctxt "@option:discardOrKeep"
msgid "Always transfer changed settings to new profile"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743
msgctxt "@label"
msgid "Privacy"
msgstr "Tietosuoja"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:750
msgctxt "@info:tooltip"
msgid "Should Cura check for updates when the program is started?"
msgstr "Pitäisikö Curan tarkistaa saatavilla olevat päivitykset, kun ohjelma käynnistetään?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:755
msgctxt "@option:check"
msgid "Check for updates on start"
msgstr "Tarkista päivitykset käynnistettäessä"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:765
msgctxt "@info:tooltip"
msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored."
msgstr "Pitäisikö anonyymejä tietoja tulosteesta lähettää Ultimakerille? Huomaa, että malleja, IP-osoitteita tai muita henkilökohtaisia tietoja ei lähetetä eikä tallenneta."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:770
msgctxt "@option:check"
msgid "Send (anonymous) print information"
msgstr "Lähetä (anonyymit) tulostustiedot"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:779
msgctxt "@action:button"
msgid "More information"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:774
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:27
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ProfileMenu.qml:23
-msgctxt "@label"
-msgid "Experimental"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781
-msgctxt "@info:tooltip"
-msgid "Use multi build plate functionality"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786
-msgctxt "@option:check"
-msgid "Use multi build plate functionality (restart required)"
-msgstr ""
-
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415
msgctxt "@title:tab"
@@ -3343,93 +3326,84 @@ msgid "Printers"
msgstr "Tulostimet"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152
msgctxt "@action:button"
msgid "Rename"
msgstr "Nimeä uudelleen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:34
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419
msgctxt "@title:tab"
msgid "Profiles"
msgstr "Profiilit"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:104
msgctxt "@label"
msgid "Create"
msgstr "Luo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
msgctxt "@label"
msgid "Duplicate"
msgstr "Jäljennös"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:202
msgctxt "@title:window"
msgid "Create Profile"
msgstr "Luo profiili"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:204
msgctxt "@info"
msgid "Please provide a name for this profile."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:260
msgctxt "@title:window"
msgid "Duplicate Profile"
msgstr "Monista profiili"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:291
msgctxt "@title:window"
msgid "Rename Profile"
msgstr "Nimeä profiili uudelleen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:304
msgctxt "@title:window"
msgid "Import Profile"
msgstr "Profiilin tuonti"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:333
msgctxt "@title:window"
msgid "Export Profile"
msgstr "Profiilin vienti"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:396
msgctxt "@label %1 is printer name"
msgid "Printer: %1"
msgstr "Tulostin: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Default profiles"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Custom profiles"
-msgstr "Mukautetut profiilit"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:554
msgctxt "@action:button"
msgid "Update profile with current settings/overrides"
msgstr "Päivitä nykyiset asetukset tai ohitukset profiiliin"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:561
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:257
msgctxt "@action:button"
msgid "Discard current changes"
msgstr "Hylkää tehdyt muutokset"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:580
msgctxt "@action:label"
msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below."
msgstr "Tässä profiilissa käytetään tulostimen oletusarvoja, joten siinä ei ole alla olevan listan asetuksia tai ohituksia."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:588
msgctxt "@action:label"
msgid "Your current settings match the selected profile."
msgstr "Nykyiset asetukset vastaavat valittua profiilia."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:606
msgctxt "@title:tab"
msgid "Global Settings"
msgstr "Yleiset asetukset"
@@ -3494,35 +3468,35 @@ msgstr ""
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:68
msgctxt "@label:textbox"
-msgid "search settings"
+msgid "Search settings"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:462
msgctxt "@action:menu"
msgid "Copy value to all extruders"
msgstr "Kopioi arvo kaikkiin suulakepuristimiin"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:471
msgctxt "@action:menu"
msgid "Copy all changed values to all extruders"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:508
msgctxt "@action:menu"
msgid "Hide this setting"
msgstr "Piilota tämä asetus"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:521
msgctxt "@action:menu"
msgid "Don't show this setting"
msgstr "Älä näytä tätä asetusta"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
msgctxt "@action:menu"
msgid "Keep this setting visible"
msgstr "Pidä tämä asetus näkyvissä"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434
msgctxt "@action:menu"
msgid "Configure setting visibility..."
@@ -3554,17 +3528,17 @@ msgctxt "@label Header for list of settings."
msgid "Affected By"
msgstr "Riippuu seuraavista:"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:187
msgctxt "@label"
msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:191
msgctxt "@label"
msgid "The value is resolved from per-extruder values "
msgstr "Arvo perustuu suulakepuristimien arvoihin "
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:230
msgctxt "@label"
msgid ""
"This setting has a value that is different from the profile.\n"
@@ -3575,7 +3549,7 @@ msgstr ""
"\n"
"Palauta profiilin arvo napsauttamalla."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:329
msgctxt "@label"
msgid ""
"This setting is normally calculated, but it currently has an absolute value set.\n"
@@ -3586,6 +3560,13 @@ msgstr ""
"\n"
"Palauta laskettu arvo napsauttamalla."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/NoIntentIcon.qml:31
+msgctxt "@label %1 is filled in with the type of a profile. %2 is filled with a list of numbers (eg '1' or '1, 2')"
+msgid "There is no %1 profile for the configuration in extruder %2. The default intent will be used instead"
+msgid_plural "There is no %1 profile for the configurations in extruders %2. The default intent will be used instead"
+msgstr[0] ""
+msgstr[1] ""
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:144
msgctxt "@button"
msgid "Recommended"
@@ -3626,26 +3607,11 @@ msgctxt "@label"
msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards."
msgstr "Ota reunuksen tai pohjaristikon tulostus käyttöön. Tämä lisää kappaleen ympärille tai alle tasaisen alueen, joka on helppo leikata pois myöhemmin."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:175
-msgctxt "@label"
-msgid "Layer Height"
-msgstr "Kerroksen korkeus"
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:206
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:81
msgctxt "@tooltip"
msgid "You have modified some profile settings. If you want to change these go to custom mode."
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:355
-msgctxt "@tooltip"
-msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449
-msgctxt "@tooltip"
-msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
-msgstr ""
-
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:13
msgctxt "@label:Should be short"
msgid "On"
@@ -3656,12 +3622,17 @@ msgctxt "@label:Should be short"
msgid "Off"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:27
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:33
+msgctxt "@label"
+msgid "Experimental"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:47
msgctxt "@label"
msgid "Profile"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:94
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:172
msgctxt "@tooltip"
msgid ""
"Some setting/override values are different from the values stored in the profile.\n"
@@ -3672,6 +3643,11 @@ msgstr ""
"\n"
"Avaa profiilin hallinta napsauttamalla."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:160
+msgctxt "@label:header"
+msgid "Custom profiles"
+msgstr ""
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:21
msgctxt "@label shown when we load a Gcode file"
msgid "Print setup disabled. G-code file can not be modified."
@@ -3799,11 +3775,16 @@ msgctxt "@label:category menu label"
msgid "Material"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:42
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:46
msgctxt "@label:category menu label"
msgid "Favorites"
msgstr ""
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:71
+msgctxt "@label:category menu label"
+msgid "Generic"
+msgstr ""
+
#: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25
msgctxt "@label:category menu label"
msgid "Network enabled printers"
@@ -3839,16 +3820,6 @@ msgctxt "@action:inmenu"
msgid "Disable Extruder"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63
-msgctxt "@title:menu"
-msgid "&Build plate"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66
-msgctxt "@title:settings"
-msgid "&Profile"
-msgstr "&Profiili"
-
#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:19
msgctxt "@action:inmenu menubar:view"
msgid "&Camera position"
@@ -3928,12 +3899,12 @@ msgctxt "@header"
msgid "Configurations"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:110
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:112
msgctxt "@label"
msgid "Select configuration"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:223
msgctxt "@label"
msgid "Configurations"
msgstr ""
@@ -3963,12 +3934,12 @@ msgctxt "@label"
msgid "Enabled"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:251
msgctxt "@label"
msgid "Material"
msgstr "Materiaali"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:375
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:378
msgctxt "@label"
msgid "Use glue for better adhesion with this material combination."
msgstr ""
@@ -4382,44 +4353,44 @@ msgctxt "@title:tab"
msgid "Settings"
msgstr "Asetukset"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538
msgctxt "@title:window"
msgid "Closing Cura"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551
msgctxt "@label"
msgid "Are you sure you want to exit Cura?"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:589
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19
msgctxt "@title:window"
msgid "Open file(s)"
msgstr "Avaa tiedosto(t)"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:695
msgctxt "@window:title"
msgid "Install Package"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:703
msgctxt "@title:window"
msgid "Open File(s)"
msgstr "Avaa tiedosto(t)"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:706
msgctxt "@text:window"
msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one."
msgstr "Löysimme vähintään yhden Gcode-tiedoston valitsemiesi tiedostojen joukosta. Voit avata vain yhden Gcode-tiedoston kerrallaan. Jos haluat avata Gcode-tiedoston, valitse vain yksi."
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:809
msgctxt "@title:window"
msgid "Add Printer"
msgstr "Lisää tulostin"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:817
msgctxt "@title:window"
msgid "What's New"
msgstr ""
@@ -4490,17 +4461,17 @@ msgctxt "@title:window"
msgid "About Cura"
msgstr "Tietoja Curasta"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:56
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:57
msgctxt "@label"
msgid "version: %1"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:72
msgctxt "@label"
msgid "End-to-end solution for fused filament 3D printing."
msgstr "Kokonaisvaltainen sulatettavan tulostuslangan 3D-tulostusratkaisu."
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:84
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:85
msgctxt "@info:credit"
msgid ""
"Cura is developed by Ultimaker B.V. in cooperation with the community.\n"
@@ -4509,122 +4480,122 @@ msgstr ""
"Cura-ohjelman on kehittänyt Ultimaker B.V. yhteistyössä käyttäjäyhteisön kanssa.\n"
"Cura hyödyntää seuraavia avoimeen lähdekoodiin perustuvia projekteja:"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
msgctxt "@label"
msgid "Graphical user interface"
msgstr "Graafinen käyttöliittymä"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
msgctxt "@label"
msgid "Application framework"
msgstr "Sovelluskehys"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
msgctxt "@label"
msgid "G-code generator"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:138
msgctxt "@label"
msgid "Interprocess communication library"
msgstr "Prosessien välinen tietoliikennekirjasto"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:139
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
msgctxt "@label"
msgid "Programming language"
msgstr "Ohjelmointikieli"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
msgctxt "@label"
msgid "GUI framework"
msgstr "GUI-kehys"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
msgctxt "@label"
msgid "GUI framework bindings"
msgstr "GUI-kehyksen sidonnat"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
msgctxt "@label"
msgid "C/C++ Binding library"
msgstr "C/C++ -sidontakirjasto"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
msgctxt "@label"
msgid "Data interchange format"
msgstr "Data Interchange Format"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
msgctxt "@label"
msgid "Support library for scientific computing"
msgstr "Tieteellisen laskennan tukikirjasto"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
msgctxt "@label"
msgid "Support library for faster math"
msgstr "Nopeamman laskennan tukikirjasto"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
msgctxt "@label"
msgid "Support library for handling STL files"
msgstr "STL-tiedostojen käsittelyn tukikirjasto"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
msgctxt "@label"
msgid "Support library for handling planar objects"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
msgctxt "@label"
msgid "Support library for handling triangular meshes"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
msgctxt "@label"
msgid "Support library for analysis of complex networks"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
msgctxt "@label"
msgid "Support library for handling 3MF files"
msgstr "Tukikirjasto 3MF-tiedostojen käsittelyyn"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
msgctxt "@label"
msgid "Support library for file metadata and streaming"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
msgctxt "@label"
msgid "Serial communication library"
msgstr "Sarjatietoliikennekirjasto"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
msgctxt "@label"
msgid "ZeroConf discovery library"
msgstr "ZeroConf-etsintäkirjasto"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
msgctxt "@label"
msgid "Polygon clipping library"
msgstr "Monikulmion leikkauskirjasto"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:156
msgctxt "@Label"
msgid "Python HTTP library"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:157
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
msgctxt "@label"
msgid "Font"
msgstr "Fontti"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
msgctxt "@label"
msgid "SVG icons"
msgstr "SVG-kuvakkeet"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:160
msgctxt "@label"
msgid "Linux cross-distribution application deployment"
msgstr ""
@@ -4644,32 +4615,27 @@ msgctxt "@title:window"
msgid "Save Project"
msgstr "Tallenna projekti"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149
-msgctxt "@action:label"
-msgid "Build plate"
-msgstr ""
-
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:177
msgctxt "@action:label"
msgid "Extruder %1"
msgstr "Suulake %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:192
msgctxt "@action:label"
msgid "%1 & material"
msgstr "%1 & materiaali"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:194
msgctxt "@action:label"
msgid "Material"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
msgctxt "@action:label"
msgid "Don't show project summary on save again"
msgstr "Älä näytä projektin yhteenvetoa tallennettaessa"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:302
msgctxt "@action:button"
msgid "Save"
msgstr "Tallenna"
@@ -4845,12 +4811,12 @@ msgctxt "@label"
msgid "Troubleshooting"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:211
msgctxt "@label"
msgid "Printer name"
msgstr ""
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:224
msgctxt "@text"
msgid "Please give your printer a name"
msgstr ""
@@ -4907,6 +4873,31 @@ msgctxt "@button"
msgid "Get started"
msgstr ""
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:27
+msgctxt "@info:tooltip"
+msgid "3D View"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:40
+msgctxt "@info:tooltip"
+msgid "Front View"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:53
+msgctxt "@info:tooltip"
+msgid "Top View"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:66
+msgctxt "@info:tooltip"
+msgid "Left View"
+msgstr ""
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:79
+msgctxt "@info:tooltip"
+msgid "Right View"
+msgstr ""
+
#: MachineSettingsAction/plugin.json
msgctxt "description"
msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)."
@@ -4967,16 +4958,6 @@ msgctxt "name"
msgid "Model Checker"
msgstr ""
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "description"
-msgid "Dump the contents of all settings to a HTML file."
-msgstr "Vedosta kaikkien asetusten sisällöt HTML-tiedostoon."
-
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "name"
-msgid "God Mode"
-msgstr "Jumala-tila"
-
#: FirmwareUpdater/plugin.json
msgctxt "description"
msgid "Provides a machine actions for updating firmware."
@@ -4987,16 +4968,6 @@ msgctxt "name"
msgid "Firmware Updater"
msgstr ""
-#: ProfileFlattener/plugin.json
-msgctxt "description"
-msgid "Create a flattened quality changes profile."
-msgstr ""
-
-#: ProfileFlattener/plugin.json
-msgctxt "name"
-msgid "Profile Flattener"
-msgstr ""
-
#: AMFReader/plugin.json
msgctxt "description"
msgid "Provides support for reading AMF files."
@@ -5197,6 +5168,16 @@ msgctxt "name"
msgid "Version Upgrade 3.3 to 3.4"
msgstr ""
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "description"
+msgid "Upgrades configurations from Cura 4.3 to Cura 4.4."
+msgstr ""
+
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "name"
+msgid "Version Upgrade 4.3 to 4.4"
+msgstr ""
+
#: VersionUpgrade/VersionUpgrade25to26/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 2.5 to Cura 2.6."
@@ -5397,16 +5378,6 @@ msgctxt "name"
msgid "Cura Profile Writer"
msgstr "Cura-profiilin kirjoitin"
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "description"
-msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
-msgstr ""
-
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "name"
-msgid "Print Profile Assistant"
-msgstr ""
-
#: 3MFWriter/plugin.json
msgctxt "description"
msgid "Provides support for writing 3MF files."
@@ -5447,6 +5418,50 @@ msgctxt "name"
msgid "Cura Profile Reader"
msgstr "Cura-profiilin lukija"
+#~ msgctxt "@item:inmenu"
+#~ msgid "Flatten active settings"
+#~ msgstr "Aktivoitujen asetusten tasoitus"
+
+#~ msgctxt "@info:status"
+#~ msgid "Profile has been flattened & activated."
+#~ msgstr "Profiili on tasoitettu ja aktivoitu."
+
+#~ msgctxt "X3G Writer File Description"
+#~ msgid "X3G File"
+#~ msgstr "X3G-tiedosto"
+
+#~ msgctxt "@action:button"
+#~ msgid "Retry"
+#~ msgstr "Yritä uudelleen"
+
+#~ msgctxt "@action:ComboBox option"
+#~ msgid "Update existing"
+#~ msgstr "Päivitä nykyinen"
+
+#~ msgctxt "@label"
+#~ msgid "Please select any upgrades made to this Ultimaker 2."
+#~ msgstr "Valitse tähän Ultimaker 2 -laitteeseen tehdyt päivitykset."
+
+#~ msgctxt "@label"
+#~ msgid "Olsson Block"
+#~ msgstr "Olsson Block -lämmitysosa"
+
+#~ msgctxt "@label"
+#~ msgid "Layer Height"
+#~ msgstr "Kerroksen korkeus"
+
+#~ msgctxt "@title:settings"
+#~ msgid "&Profile"
+#~ msgstr "&Profiili"
+
+#~ msgctxt "description"
+#~ msgid "Dump the contents of all settings to a HTML file."
+#~ msgstr "Vedosta kaikkien asetusten sisällöt HTML-tiedostoon."
+
+#~ msgctxt "name"
+#~ msgid "God Mode"
+#~ msgstr "Jumala-tila"
+
#~ msgctxt "@info:status"
#~ msgid "Connected over the network."
#~ msgstr "Yhdistetty verkon kautta tulostimeen."
diff --git a/resources/i18n/fi_FI/fdmextruder.def.json.po b/resources/i18n/fi_FI/fdmextruder.def.json.po
index 764e9ea028..86dd3b3474 100644
--- a/resources/i18n/fi_FI/fdmextruder.def.json.po
+++ b/resources/i18n/fi_FI/fdmextruder.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2017-08-11 14:31+0200\n"
"Last-Translator: Bothof \n"
"Language-Team: Finnish\n"
diff --git a/resources/i18n/fi_FI/fdmprinter.def.json.po b/resources/i18n/fi_FI/fdmprinter.def.json.po
index a9f1caa636..3f1b71753b 100644
--- a/resources/i18n/fi_FI/fdmprinter.def.json.po
+++ b/resources/i18n/fi_FI/fdmprinter.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2017-09-27 12:27+0200\n"
"Last-Translator: Bothof \n"
"Language-Team: Finnish\n"
@@ -1025,6 +1025,16 @@ msgctxt "bottom_layers description"
msgid "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number."
msgstr "Alakerrosten lukumäärä. Kun se lasketaan alaosan paksuudesta, arvo pyöristetään kokonaislukuun."
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers label"
+msgid "Initial Bottom Layers"
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers description"
+msgid "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number."
+msgstr ""
+
#: fdmprinter.def.json
msgctxt "top_bottom_pattern label"
msgid "Top/Bottom Pattern"
@@ -3974,7 +3984,7 @@ msgstr ""
#: fdmprinter.def.json
msgctxt "minimum_interface_area description"
-msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
+msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will be printed as normal support."
msgstr ""
#: fdmprinter.def.json
@@ -3984,7 +3994,7 @@ msgstr ""
#: fdmprinter.def.json
msgctxt "minimum_roof_area description"
-msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
+msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will be printed as normal support."
msgstr ""
#: fdmprinter.def.json
@@ -3994,7 +4004,7 @@ msgstr ""
#: fdmprinter.def.json
msgctxt "minimum_bottom_area description"
-msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
+msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will be printed as normal support."
msgstr ""
#: fdmprinter.def.json
@@ -4779,6 +4789,36 @@ msgctxt "remove_empty_first_layers description"
msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle."
msgstr ""
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution label"
+msgid "Maximum Resolution"
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution description"
+msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution label"
+msgid "Maximum Travel Resolution"
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution description"
+msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation label"
+msgid "Maximum Deviation"
+msgstr ""
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation description"
+msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
+msgstr ""
+
#: fdmprinter.def.json
msgctxt "blackmagic label"
msgid "Special Modes"
@@ -5154,36 +5194,6 @@ msgctxt "minimum_polygon_circumference description"
msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details."
msgstr ""
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution label"
-msgid "Maximum Resolution"
-msgstr ""
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution description"
-msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
-msgstr ""
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution label"
-msgid "Maximum Travel Resolution"
-msgstr ""
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution description"
-msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
-msgstr ""
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation label"
-msgid "Maximum Deviation"
-msgstr ""
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation description"
-msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
-msgstr ""
-
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
msgid "Break Up Support In Chunks"
@@ -5324,16 +5334,6 @@ msgctxt "coasting_speed description"
msgid "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops."
msgstr "Nopeus, jolla siirrytään vapaaliu'un aikana, suhteessa pursotusreitin nopeuteen. Arvoksi suositellaan hieman alle 100 %, sillä vapaaliukusiirron aikana paine Bowden-putkessa laskee."
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation label"
-msgid "Alternate Skin Rotation"
-msgstr "Vuorottele pintakalvon pyöritystä"
-
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation description"
-msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
-msgstr "Muuttaa ylä-/alakerrosten tulostussuuntaa. Normaalisti ne tulostetaan vain vinottain. Tämä asetus lisää vain X- ja vain Y -suunnat."
-
#: fdmprinter.def.json
msgctxt "cross_infill_pocket_size label"
msgid "Cross 3D Pocket Size"
@@ -5506,22 +5506,22 @@ msgstr "Keskimääräinen etäisyys kunkin linjasegmentin satunnaisten pisteiden
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset label"
-msgid "Flow rate compensation max extrusion offset"
+msgid "Flow Rate Compensation Max Extrusion Offset"
msgstr ""
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset description"
-msgid "The maximum distance in mm to compensate."
+msgid "The maximum distance in mm to move the filament to compensate for changes in flow rate."
msgstr ""
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor label"
-msgid "Flow rate compensation factor"
+msgid "Flow Rate Compensation Factor"
msgstr ""
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor description"
-msgid "The multiplication factor for the flow rate -> distance translation."
+msgid "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."
msgstr ""
#: fdmprinter.def.json
@@ -5815,12 +5815,12 @@ msgstr ""
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold label"
-msgid "Adaptive Layers Threshold"
+msgid "Adaptive Layers Topography Size"
msgstr ""
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold description"
-msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
+msgid "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."
msgstr ""
#: fdmprinter.def.json
@@ -5830,7 +5830,7 @@ msgstr ""
#: fdmprinter.def.json
msgctxt "wall_overhang_angle description"
-msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
+msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging. Overhang that gets supported by support will not be treated as overhang either."
msgstr ""
#: fdmprinter.def.json
@@ -6210,17 +6210,17 @@ msgstr ""
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor description"
-msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
msgstr ""
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 label"
-msgid "First Layer Speed"
+msgid "Small Feature Initial Layer Speed"
msgstr ""
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 description"
-msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
msgstr ""
#: fdmprinter.def.json
@@ -6283,6 +6283,14 @@ msgctxt "mesh_rotation_matrix description"
msgid "Transformation matrix to be applied to the model when loading it from file."
msgstr "Mallissa käytettävä muunnosmatriisi, kun malli ladataan tiedostosta."
+#~ msgctxt "skin_alternate_rotation label"
+#~ msgid "Alternate Skin Rotation"
+#~ msgstr "Vuorottele pintakalvon pyöritystä"
+
+#~ msgctxt "skin_alternate_rotation description"
+#~ msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
+#~ msgstr "Muuttaa ylä-/alakerrosten tulostussuuntaa. Normaalisti ne tulostetaan vain vinottain. Tämä asetus lisää vain X- ja vain Y -suunnat."
+
#~ msgctxt "ironing_enabled description"
#~ msgid "Go over the top surface one additional time, but without extruding material. This is meant to melt the plastic on top further, creating a smoother surface."
#~ msgstr "Yläpinnan läpikäynti yhden ylimääräisen kerran ilman materiaalin pursotusta. Tämän tarkoitus on sulattaa yläosan muovia enemmän, jolloin saadaan sileämpi pinta."
diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po
index ab3190c316..3633753794 100644
--- a/resources/i18n/fr_FR/cura.po
+++ b/resources/i18n/fr_FR/cura.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0200\n"
+"POT-Creation-Date: 2019-11-05 13:13+0100\n"
"PO-Revision-Date: 2019-07-29 15:51+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: French , French \n"
@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 2.2.3\n"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:30
msgctxt "@action"
msgid "Machine Settings"
msgstr "Paramètres de la machine"
@@ -40,13 +40,13 @@ msgctxt "@item:inlistbox"
msgid "G-code File"
msgstr "Fichier GCode"
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:66
msgctxt "@error:not supported"
msgid "GCodeWriter does not support non-text mode."
msgstr "GCodeWriter ne prend pas en charge le mode non-texte."
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:72
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:88
msgctxt "@warning:status"
msgid "Please prepare G-code before exporting."
msgstr "Veuillez préparer le G-Code avant d'exporter."
@@ -56,7 +56,7 @@ msgctxt "@info:title"
msgid "3D Model Assistant"
msgstr "Assistant de modèle 3D"
-#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:90
+#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:92
#, python-brace-format
msgctxt "@info:status"
msgid ""
@@ -75,16 +75,6 @@ msgctxt "@action"
msgid "Update Firmware"
msgstr "Mettre à jour le firmware"
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23
-msgctxt "@item:inmenu"
-msgid "Flatten active settings"
-msgstr "Aplatir les paramètres actifs"
-
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35
-msgctxt "@info:status"
-msgid "Profile has been flattened & activated."
-msgstr "Le profil a été aplati et activé."
-
#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "AMF File"
@@ -125,21 +115,6 @@ msgctxt "@message"
msgid "Print in Progress"
msgstr "Impression en cours"
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
-msgctxt "X3g Writer Plugin Description"
-msgid "Writes X3g to files"
-msgstr "Écrit X3G dans des fichiers"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21
-msgctxt "X3g Writer File Description"
-msgid "X3g File"
-msgstr "Fichier X3G"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15
-msgctxt "X3G Writer File Description"
-msgid "X3G File"
-msgstr "Fichier X3G"
-
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17
#: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17
msgctxt "@item:inlistbox"
@@ -211,9 +186,9 @@ msgid "Could not save to removable drive {0}: {1}"
msgstr "Impossible d'enregistrer sur le lecteur {0}: {1}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1634
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:139
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:146
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1668
msgctxt "@info:title"
msgid "Error"
msgstr "Erreur"
@@ -243,8 +218,8 @@ msgstr "Ejecter le lecteur amovible {0}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1624
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1724
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1658
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1758
msgctxt "@info:title"
msgid "Warning"
msgstr "Avertissement"
@@ -276,17 +251,17 @@ msgctxt "@action"
msgid "Connect via Network"
msgstr "Connecter via le réseau"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:57
msgctxt "@action:button Preceded by 'Ready to'."
msgid "Print over network"
msgstr "Imprimer sur le réseau"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:58
msgctxt "@properties:tooltip"
msgid "Print over network"
msgstr "Imprimer sur le réseau"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:59
msgctxt "@info:status"
msgid "Connected over the network"
msgstr "Connecté sur le réseau"
@@ -301,6 +276,21 @@ msgctxt "@info:title"
msgid "Print error"
msgstr "Erreur d'impression"
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:21
+msgctxt "@info:title"
+msgid "New cloud printers found"
+msgstr "Nouvelles imprimantes cloud trouvées"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:22
+msgctxt "@info:message"
+msgid "New printers have been found connected to your account, you can find them in your list of discovered printers."
+msgstr "De nouvelles imprimantes ont été trouvées connectées à votre compte. Vous pouvez les trouver dans votre liste d'imprimantes découvertes."
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:27
+msgctxt "@info:option_text"
+msgid "Do not show this message again"
+msgstr "Ne plus afficher ce message"
+
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
@@ -501,7 +491,7 @@ msgid "GIF Image"
msgstr "Image GIF"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
-msgctxt "@item:inlistbox"
+msgctxt "@item:inlistbox 'Open' is part of the name of this file format."
msgid "Open Compressed Triangle Mesh"
msgstr "Ouvrir le maillage triangulaire compressé"
@@ -594,12 +584,12 @@ msgctxt "@info:tooltip"
msgid "Configure Per Model Settings"
msgstr "Configurer les paramètres par modèle"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:186
msgctxt "@title:tab"
msgid "Recommended"
msgstr "Recommandé"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:188
msgctxt "@title:tab"
msgid "Custom"
msgstr "Personnalisé"
@@ -610,19 +600,19 @@ msgctxt "@item:inlistbox"
msgid "3MF File"
msgstr "Fichier 3MF"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:198
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:651
msgctxt "@label"
msgid "Nozzle"
msgstr "Buse"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:496
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead."
msgstr "Le fichier projet {0} contient un type de machine inconnu {1}. Impossible d'importer la machine. Les modèles seront importés à la place."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:499
msgctxt "@info:title"
msgid "Open Project File"
msgstr "Ouvrir un fichier de projet"
@@ -702,16 +692,6 @@ msgctxt "@item:inlistbox"
msgid "Cura Profile"
msgstr "Profil Cura"
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12
-msgctxt "@item:inmenu"
-msgid "Profile Assistant"
-msgstr "Assistant de profil"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:18
-msgctxt "@item:inlistbox"
-msgid "Profile Assistant"
-msgstr "Assistant de profil"
-
#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26
msgctxt "@item:inlistbox"
msgid "3MF file"
@@ -732,7 +712,6 @@ msgctxt "@item:inmenu"
msgid "Preview"
msgstr "Aperçu"
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:19
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18
msgctxt "@action"
msgid "Select upgrades"
@@ -748,134 +727,148 @@ msgctxt "@info:title"
msgid "Login failed"
msgstr "La connexion a échoué"
-#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:36
msgctxt "@info:not supported profile"
msgid "Not supported"
msgstr "Non pris en charge"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:55
+msgctxt "@info:No intent profile selected"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:196
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:125
msgctxt "@title:window"
msgid "File Already Exists"
msgstr "Le fichier existe déjà"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:197
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:126
#, python-brace-format
msgctxt "@label Don't translate the XML tag !"
msgid "The file {0} already exists. Are you sure you want to overwrite it?"
msgstr "Le fichier {0} existe déjà. Êtes-vous sûr de vouloir le remplacer ?"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:427
#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:430
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:433
msgctxt "@info:status"
msgid "Invalid file URL:"
msgstr "URL de fichier invalide :"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:780
msgctxt "@info:message Followed by a list of settings."
msgid "Settings have been changed to match the current availability of extruders:"
msgstr "Les paramètres ont été modifiés pour correspondre aux extrudeuses actuellement disponibles :"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:782
msgctxt "@info:title"
msgid "Settings updated"
msgstr "Paramètres mis à jour"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1334
msgctxt "@info:title"
msgid "Extruder(s) Disabled"
msgstr "Extrudeuse(s) désactivée(s)"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1457
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:99
+#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+msgctxt "@label"
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Failed to export profile to {0}: {1}"
msgstr "Échec de l'exportation du profil vers {0} : {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to export profile to {0}: Writer plugin reported failure."
msgstr "Échec de l'exportation du profil vers {0} : le plug-in du générateur a rapporté une erreur."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:149
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Exported profile to {0}"
msgstr "Profil exporté vers {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150
msgctxt "@info:title"
msgid "Export succeeded"
msgstr "L'exportation a réussi"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}: {1}"
msgstr "Impossible d'importer le profil depuis {0} : {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:181
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Can't import profile from {0} before a printer is added."
msgstr "Impossible d'importer le profil depuis {0} avant l'ajout d'une imprimante."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:198
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "No custom profile to import in file {0}"
msgstr "Aucun profil personnalisé à importer dans le fichier {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:202
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}:"
msgstr "Échec de l'importation du profil depuis le fichier {0} :"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:226
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:236
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "This profile {0} contains incorrect data, could not import it."
msgstr "Le profil {0} contient des données incorrectes ; échec de l'importation."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:325
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to import profile from {0}:"
msgstr "Échec de l'importation du profil depuis le fichier {0} :"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:328
#, python-brace-format
msgctxt "@info:status"
msgid "Successfully imported profile {0}"
msgstr "Importation du profil {0} réussie"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:331
#, python-brace-format
msgctxt "@info:status"
msgid "File {0} does not contain any valid profile."
msgstr "Le fichier {0} ne contient pas de profil valide."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:334
#, python-brace-format
msgctxt "@info:status"
msgid "Profile {0} has an unknown file type or is corrupted."
msgstr "Le profil {0} est un type de fichier inconnu ou est corrompu."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369
msgctxt "@label"
msgid "Custom profile"
msgstr "Personnaliser le profil"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:385
msgctxt "@info:status"
msgid "Profile is missing a quality type."
msgstr "Il manque un type de qualité au profil."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:399
#, python-brace-format
msgctxt "@info:status"
msgid "Could not find a quality type {0} for the current configuration."
@@ -941,14 +934,13 @@ msgctxt "@tooltip"
msgid "Other"
msgstr "Autre"
-#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:306
+#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:302
#, python-brace-format
msgctxt "@label"
msgid "Pre-sliced file {0}"
msgstr "Fichier {0} prédécoupé"
#: /home/ruben/Projects/Cura/cura/UI/WelcomePagesModel.py:56
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:62
msgctxt "@action:button"
msgid "Next"
msgstr "Suivant"
@@ -962,9 +954,9 @@ msgstr "Groupe nº {group_nr}"
#: /home/ruben/Projects/Cura/cura/UI/WhatsNewPagesModel.py:17
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:133
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:169
msgctxt "@action:button"
msgid "Close"
msgstr "Fermer"
@@ -979,40 +971,86 @@ msgstr "Ajouter"
#: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:18
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:19
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:81
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:352
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:42
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:58
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:149
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:406
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:294
msgctxt "@action:button"
msgid "Cancel"
msgstr "Annuler"
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:36
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:320
+msgctxt "@label"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:39
+msgctxt "@label"
+msgid "Visual"
+msgstr "Visuel"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:40
+msgctxt "@text"
+msgid "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality."
+msgstr "Le profil visuel est conçu pour imprimer des prototypes et des modèles visuels dans le but d'obtenir une qualité visuelle et de surface élevée."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:43
+msgctxt "@label"
+msgid "Engineering"
+msgstr "Engineering"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:44
+msgctxt "@text"
+msgid "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances."
+msgstr "Le profil d'ingénierie est conçu pour imprimer des prototypes fonctionnels et des pièces finales dans le but d'obtenir une meilleure précision et des tolérances"
+" plus étroites."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:47
+msgctxt "@label"
+msgid "Draft"
+msgstr "Ébauche"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:48
+msgctxt "@text"
+msgid "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction."
+msgstr "L'ébauche du profil est conçue pour imprimer les prototypes initiaux et la validation du concept dans le but de réduire considérablement le temps d'impression."
+
#: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208
msgctxt "@menuitem"
msgid "Not overridden"
msgstr "Pas écrasé"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:109
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:357
+msgctxt "@label"
+msgid "Custom profiles"
+msgstr "Personnaliser les profils"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:391
#, python-brace-format
msgctxt "@item:inlistbox"
msgid "All Supported Types ({0})"
msgstr "Tous les types supportés ({0})"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:110
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:392
msgctxt "@item:inlistbox"
msgid "All Files (*)"
msgstr "Tous les fichiers (*)"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:213
msgctxt "@label"
-msgid "Unknown"
-msgstr "Inconnu"
+msgid "Custom Material"
+msgstr "Matériau personnalisé"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:214
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:205
+msgctxt "@label"
+msgid "Custom"
+msgstr "Personnalisé"
#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116
msgctxt "@label"
@@ -1024,17 +1062,6 @@ msgctxt "@label"
msgid "Available networked printers"
msgstr "Imprimantes en réseau disponibles"
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689
-msgctxt "@label"
-msgid "Custom Material"
-msgstr "Matériau personnalisé"
-
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:690
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:203
-msgctxt "@label"
-msgid "Custom"
-msgstr "Personnalisé"
-
#: /home/ruben/Projects/Cura/cura/BuildVolume.py:90
msgctxt "@info:status"
msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models."
@@ -1070,11 +1097,6 @@ msgctxt "@info"
msgid "Unable to reach the Ultimaker account server."
msgstr "Impossible d’atteindre le serveur du compte Ultimaker."
-#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202
-msgctxt "@action:button"
-msgid "Retry"
-msgstr "Réessayer"
-
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70
msgctxt "@message"
msgid "Please give the required permissions when authorizing this application."
@@ -1259,62 +1281,67 @@ msgctxt "@action:button"
msgid "Send report"
msgstr "Envoyer rapport"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:513
msgctxt "@info:progress"
msgid "Loading machines..."
msgstr "Chargement des machines..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:520
+msgctxt "@info:progress"
+msgid "Setting up preferences..."
+msgstr "Configuration des préférences..."
+
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:824
msgctxt "@info:progress"
msgid "Setting up scene..."
msgstr "Préparation de la scène..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:859
msgctxt "@info:progress"
msgid "Loading interface..."
msgstr "Chargement de l'interface..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1150
#, python-format
msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm."
msgid "%(width).1f x %(depth).1f x %(height).1f mm"
msgstr "%(width).1f x %(depth).1f x %(height).1f mm"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1657
#, python-brace-format
msgctxt "@info:status"
msgid "Only one G-code file can be loaded at a time. Skipped importing {0}"
msgstr "Un seul fichier G-Code peut être chargé à la fois. Importation de {0} sautée"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1667
#, python-brace-format
msgctxt "@info:status"
msgid "Can't open any other file if G-code is loading. Skipped importing {0}"
msgstr "Impossible d'ouvrir un autre fichier si le G-Code est en cours de chargement. Importation de {0} sautée"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1757
msgctxt "@info:status"
msgid "The selected model was too small to load."
msgstr "Le modèle sélectionné était trop petit pour être chargé."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:56
msgctxt "@title:label"
msgid "Printer Settings"
msgstr "Paramètres de l'imprimante"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70
msgctxt "@label"
msgid "X (Width)"
msgstr "X (Largeur)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:76
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:90
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:104
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:206
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:225
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:244
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:74
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:88
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:102
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:203
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:223
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:243
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:265
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:285
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:79
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:93
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:109
@@ -1323,57 +1350,57 @@ msgctxt "@label"
msgid "mm"
msgstr "mm"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84
msgctxt "@label"
msgid "Y (Depth)"
msgstr "Y (Profondeur)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98
msgctxt "@label"
msgid "Z (Height)"
msgstr "Z (Hauteur)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112
msgctxt "@label"
msgid "Build plate shape"
msgstr "Forme du plateau"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125
msgctxt "@label"
msgid "Origin at center"
msgstr "Origine au centre"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137
msgctxt "@label"
msgid "Heated bed"
msgstr "Plateau chauffant"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149
msgctxt "@label"
msgid "Heated build volume"
msgstr "Volume de fabrication chauffant"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:161
msgctxt "@label"
msgid "G-code flavor"
msgstr "Parfum G-Code"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:185
msgctxt "@title:label"
msgid "Printhead Settings"
msgstr "Paramètres de la tête d'impression"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:199
msgctxt "@label"
msgid "X min"
msgstr "X min"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:219
msgctxt "@label"
msgid "Y min"
msgstr "Y min"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:239
msgctxt "@label"
msgid "X max"
msgstr "X max"
@@ -1383,22 +1410,22 @@ msgctxt "@label"
msgid "Y max"
msgstr "Y max"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:281
msgctxt "@label"
msgid "Gantry Height"
msgstr "Hauteur du portique"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:295
msgctxt "@label"
msgid "Number of Extruders"
msgstr "Nombre d'extrudeuses"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:355
msgctxt "@title:label"
msgid "Start G-code"
msgstr "G-Code de démarrage"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:366
msgctxt "@title:label"
msgid "End G-code"
msgstr "G-Code de fin"
@@ -1477,7 +1504,7 @@ msgstr "Plug-ins"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:77
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:44
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:89
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417
msgctxt "@title:tab"
msgid "Materials"
@@ -1672,11 +1699,6 @@ msgctxt "@label:table_header"
msgid "Machine"
msgstr "Machine"
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131
-msgctxt "@label:table_header"
-msgid "Print Core"
-msgstr "Print Core"
-
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137
msgctxt "@label:table_header"
msgid "Build Plate"
@@ -1932,9 +1954,9 @@ msgid "Edit"
msgstr "Modifier"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:88
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:155
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:138
msgctxt "@action:button"
msgid "Remove"
msgstr "Supprimer"
@@ -1955,61 +1977,61 @@ msgctxt "@label"
msgid "Type"
msgstr "Type"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:225
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274
msgctxt "@label"
msgid "Firmware version"
msgstr "Version du firmware"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:239
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:290
msgctxt "@label"
msgid "Address"
msgstr "Adresse"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:263
msgctxt "@label"
msgid "This printer is not set up to host a group of printers."
msgstr "Cette imprimante n'est pas configurée pour héberger un groupe d'imprimantes."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:267
msgctxt "@label"
msgid "This printer is the host for a group of %1 printers."
msgstr "Cette imprimante est l'hôte d'un groupe d'imprimantes %1."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:278
msgctxt "@label"
msgid "The printer at this address has not yet responded."
msgstr "L'imprimante à cette adresse n'a pas encore répondu."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283
msgctxt "@action:button"
msgid "Connect"
msgstr "Connecter"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:296
msgctxt "@title:window"
msgid "Invalid IP address"
msgstr "Adresse IP non valide"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146
msgctxt "@text"
msgid "Please enter a valid IP address."
msgstr "Veuillez saisir une adresse IP valide."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:308
msgctxt "@title:window"
msgid "Printer Address"
msgstr "Adresse de l'imprimante"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:331
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102
msgctxt "@label"
msgid "Enter the IP address of your printer on the network."
msgstr "Saisissez l'adresse IP de votre imprimante sur le réseau."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181
msgctxt "@action:button"
@@ -2064,17 +2086,17 @@ msgctxt "@label:status"
msgid "Finishes %1 at %2"
msgstr "Finit %1 à %2"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44
-msgctxt "@action:button"
-msgid "Print"
-msgstr "Imprimer"
-
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:11
msgctxt "@title:window"
msgid "Print over network"
msgstr "Imprimer sur le réseau"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:52
+msgctxt "@action:button"
+msgid "Print"
+msgstr "Imprimer"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:80
msgctxt "@label"
msgid "Printer selection"
msgstr "Sélection d'imprimantes"
@@ -2424,70 +2446,69 @@ msgctxt "@action:label"
msgid "Smoothing"
msgstr "Lissage"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37
-msgctxt "@label"
-msgid "Mesh Type"
-msgstr "Type de maille"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68
-msgctxt "@label"
-msgid "Normal model"
-msgstr "Modèle normal"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75
-msgctxt "@label"
-msgid "Print as support"
-msgstr "Imprimer comme support"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83
-msgctxt "@label"
-msgid "Don't support overlap with other models"
-msgstr "Ne pas prendre en charge le chevauchement avec d'autres modèles"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91
-msgctxt "@label"
-msgid "Modify settings for overlap with other models"
-msgstr "Modifier les paramètres de chevauchement avec d'autres modèles"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99
-msgctxt "@label"
-msgid "Modify settings for infill of other models"
-msgstr "Modifier les paramètres de remplissage d'autres modèles"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:346
-msgctxt "@action:button"
-msgid "Select settings"
-msgstr "Sélectionner les paramètres"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:388
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:13
msgctxt "@title:window"
msgid "Select Settings to Customize for this model"
msgstr "Sélectionner les paramètres pour personnaliser ce modèle"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:56
#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:94
msgctxt "@label:textbox"
msgid "Filter..."
msgstr "Filtrer..."
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:70
msgctxt "@label:checkbox"
msgid "Show all"
msgstr "Afficher tout"
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:44
+msgctxt "@label"
+msgid "Mesh Type"
+msgstr "Type de maille"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:85
+msgctxt "@label"
+msgid "Normal model"
+msgstr "Modèle normal"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:97
+msgctxt "@label"
+msgid "Print as support"
+msgstr "Imprimer comme support"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:109
+msgctxt "@label"
+msgid "Modify settings for overlaps"
+msgstr "Modifier les paramètres de chevauchement"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:121
+msgctxt "@label"
+msgid "Don't support overlaps"
+msgstr "Ne prend pas en charge le chevauchement"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:145
+msgctxt "@action:checkbox"
+msgid "Infill only"
+msgstr "Remplissage uniquement"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:368
+msgctxt "@action:button"
+msgid "Select settings"
+msgstr "Sélectionner les paramètres"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:14
msgctxt "@title:window"
msgid "Open Project"
msgstr "Ouvrir un projet"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:58
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Update/override existing profile"
msgid "Update existing"
msgstr "Mettre à jour l'existant"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:59
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Save settings in a new profile"
msgid "Create new"
msgstr "Créer"
@@ -2514,6 +2535,11 @@ msgctxt "@action:ComboBox option"
msgid "Update"
msgstr "Mise à jour"
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
+msgctxt "@action:ComboBox option"
+msgid "Create new"
+msgstr "Créer"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:106
msgctxt "@action:label"
@@ -2527,7 +2553,7 @@ msgid "Printer Group"
msgstr "Groupe d'imprimantes"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:220
msgctxt "@action:label"
msgid "Profile settings"
msgstr "Paramètres de profil"
@@ -2538,75 +2564,81 @@ msgid "How should the conflict in the profile be resolved?"
msgstr "Comment le conflit du profil doit-il être résolu ?"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:323
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:244
msgctxt "@action:label"
msgid "Name"
msgstr "Nom"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261
+msgctxt "@action:label"
+msgid "Intent"
+msgstr "Intent"
+
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:246
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228
msgctxt "@action:label"
msgid "Not in profile"
msgstr "Absent du profil"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:251
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:233
msgctxt "@action:label"
msgid "%1 override"
msgid_plural "%1 overrides"
msgstr[0] "%1 écrasent"
msgstr[1] "%1 écrase"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:247
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:262
msgctxt "@action:label"
msgid "Derivative from"
msgstr "Dérivé de"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:252
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:267
msgctxt "@action:label"
msgid "%1, %2 override"
msgid_plural "%1, %2 overrides"
msgstr[0] "%1, %2 écrasent"
msgstr[1] "%1, %2 écrase"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:268
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:283
msgctxt "@action:label"
msgid "Material settings"
msgstr "Paramètres du matériau"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:284
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:299
msgctxt "@info:tooltip"
msgid "How should the conflict in the material be resolved?"
msgstr "Comment le conflit du matériau doit-il être résolu ?"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:342
msgctxt "@action:label"
msgid "Setting visibility"
msgstr "Visibilité des paramètres"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:336
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:351
msgctxt "@action:label"
msgid "Mode"
msgstr "Mode"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:367
msgctxt "@action:label"
msgid "Visible settings:"
msgstr "Paramètres visibles :"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:372
msgctxt "@action:label"
msgid "%1 out of %2"
msgstr "%1 sur %2"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:383
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:398
msgctxt "@action:warning"
msgid "Loading a project will clear all models on the build plate."
msgstr "Le chargement d'un projet effacera tous les modèles sur le plateau."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:401
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:416
msgctxt "@action:button"
msgid "Open"
msgstr "Ouvrir"
@@ -2713,54 +2745,6 @@ msgctxt "@checkbox:description"
msgid "Automatically create a backup each day that Cura is started."
msgstr "Créez automatiquement une sauvegarde chaque jour où Cura est démarré."
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMainSettingsSelector.qml:75
-msgctxt "@label"
-msgid "Not supported"
-msgstr "Non pris en charge"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:35
-msgctxt "@action:button"
-msgid "Previous"
-msgstr "Précédent"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:174
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:159
-msgctxt "@action:button"
-msgid "Export"
-msgstr "Exporter"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209
-msgctxt "@label"
-msgid "Tip"
-msgstr "Astuce"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMaterialMenu.qml:20
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66
-msgctxt "@label:category menu label"
-msgid "Generic"
-msgstr "Générique"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:160
-msgctxt "@label"
-msgid "Print experiment"
-msgstr "Test d'impression"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:25
-msgctxt "@label"
-msgid "Checklist"
-msgstr "Liste de contrôle"
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:30
-msgctxt "@label"
-msgid "Please select any upgrades made to this Ultimaker 2."
-msgstr "Sélectionnez les mises à niveau disponibles pour cet Ultimaker 2."
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:44
-msgctxt "@label"
-msgid "Olsson Block"
-msgstr "Blocage Olsson"
-
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:30
msgctxt "@title"
msgid "Build Plate Leveling"
@@ -2846,170 +2830,176 @@ msgctxt "@label"
msgid "Are you sure you want to abort the print?"
msgstr "Êtes-vous sûr(e) de vouloir abandonner l'impression ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:72
msgctxt "@title"
msgid "Information"
msgstr "Informations"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
msgctxt "@title:window"
msgid "Confirm Diameter Change"
msgstr "Confirmer le changement de diamètre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:102
msgctxt "@label (%1 is a number)"
msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?"
msgstr "Le nouveau diamètre de filament est réglé sur %1 mm, ce qui n'est pas compatible avec l'extrudeuse actuelle. Souhaitez-vous poursuivre ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:128
msgctxt "@label"
msgid "Display Name"
msgstr "Afficher le nom"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:138
msgctxt "@label"
msgid "Brand"
msgstr "Marque"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:148
msgctxt "@label"
msgid "Material Type"
msgstr "Type de matériau"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:158
msgctxt "@label"
msgid "Color"
msgstr "Couleur"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:208
msgctxt "@label"
msgid "Properties"
msgstr "Propriétés"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:210
msgctxt "@label"
msgid "Density"
msgstr "Densité"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:225
msgctxt "@label"
msgid "Diameter"
msgstr "Diamètre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:259
msgctxt "@label"
msgid "Filament Cost"
msgstr "Coût du filament"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:276
msgctxt "@label"
msgid "Filament weight"
msgstr "Poids du filament"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:294
msgctxt "@label"
msgid "Filament length"
msgstr "Longueur du filament"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:303
msgctxt "@label"
msgid "Cost per Meter"
msgstr "Coût au mètre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:317
msgctxt "@label"
msgid "This material is linked to %1 and shares some of its properties."
msgstr "Ce matériau est lié à %1 et partage certaines de ses propriétés."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:324
msgctxt "@label"
msgid "Unlink Material"
msgstr "Délier le matériau"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:335
msgctxt "@label"
msgid "Description"
msgstr "Description"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:348
msgctxt "@label"
msgid "Adhesion Information"
msgstr "Informations d'adhérence"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:374
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19
msgctxt "@label"
msgid "Print settings"
msgstr "Paramètres d'impression"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:108
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:84
msgctxt "@action:button"
msgid "Activate"
msgstr "Activer"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:126
msgctxt "@action:button"
msgid "Create"
msgstr "Créer"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:140
msgctxt "@action:button"
msgid "Duplicate"
msgstr "Dupliquer"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:170
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:167
msgctxt "@action:button"
msgid "Import"
msgstr "Importer"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:184
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:179
+msgctxt "@action:button"
+msgid "Export"
+msgstr "Exporter"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:233
msgctxt "@action:label"
msgid "Printer"
msgstr "Imprimante"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:297
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:274
msgctxt "@title:window"
msgid "Confirm Remove"
msgstr "Confirmer la suppression"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:275
msgctxt "@label (%1 is object name)"
msgid "Are you sure you wish to remove %1? This cannot be undone!"
msgstr "Êtes-vous sûr de vouloir supprimer l'objet %1 ? Vous ne pourrez pas revenir en arrière !"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:322
msgctxt "@title:window"
msgid "Import Material"
msgstr "Importer un matériau"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:323
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Could not import material %1: %2"
msgstr "Impossible d'importer le matériau %1 : %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:327
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully imported material %1"
msgstr "Matériau %1 importé avec succès"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
msgctxt "@title:window"
msgid "Export Material"
msgstr "Exporter un matériau"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:357
msgctxt "@info:status Don't translate the XML tags and !"
msgid "Failed to export material to %1: %2"
msgstr "Échec de l'exportation de matériau vers %1 : %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:363
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully exported material to %1"
msgstr "Matériau exporté avec succès vers %1"
@@ -3024,27 +3014,27 @@ msgctxt "@label:textbox"
msgid "Check all"
msgstr "Vérifier tout"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:48
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
msgctxt "@info:status"
msgid "Calculated"
msgstr "Calculer"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
msgctxt "@title:column"
msgid "Setting"
msgstr "Paramètre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:68
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:82
msgctxt "@title:column"
msgid "Profile"
msgstr "Profil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:89
msgctxt "@title:column"
msgid "Current"
msgstr "Actuel"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:83
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:97
msgctxt "@title:column"
msgid "Unit"
msgstr "Unité"
@@ -3055,307 +3045,301 @@ msgctxt "@title:tab"
msgid "General"
msgstr "Général"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:132
msgctxt "@label"
msgid "Interface"
msgstr "Interface"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:143
msgctxt "@label"
msgid "Language:"
msgstr "Langue :"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:210
msgctxt "@label"
msgid "Currency:"
msgstr "Devise :"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:223
msgctxt "@label"
msgid "Theme:"
msgstr "Thème :"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:279
msgctxt "@label"
msgid "You will need to restart the application for these changes to have effect."
msgstr "Vous devez redémarrer l'application pour que ces changements prennent effet."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:296
msgctxt "@info:tooltip"
msgid "Slice automatically when changing settings."
msgstr "Découper automatiquement si les paramètres sont modifiés."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:304
msgctxt "@option:check"
msgid "Slice automatically"
msgstr "Découper automatiquement"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:318
msgctxt "@label"
msgid "Viewport behavior"
msgstr "Comportement Viewport"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:326
msgctxt "@info:tooltip"
msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly."
msgstr "Surligne les parties non supportées du modèle en rouge. Sans ajouter de support, ces zones ne s'imprimeront pas correctement."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:335
msgctxt "@option:check"
msgid "Display overhang"
msgstr "Mettre en surbrillance les porte-à-faux"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:343
msgctxt "@info:tooltip"
msgid "Moves the camera so the model is in the center of the view when a model is selected"
msgstr "Déplace la caméra afin que le modèle sélectionné se trouve au centre de la vue"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348
msgctxt "@action:button"
msgid "Center camera when item is selected"
msgstr "Centrer la caméra lorsqu'un élément est sélectionné"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:358
msgctxt "@info:tooltip"
msgid "Should the default zoom behavior of cura be inverted?"
msgstr "Le comportement de zoom par défaut de Cura doit-il être inversé ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:363
msgctxt "@action:button"
msgid "Invert the direction of camera zoom."
msgstr "Inverser la direction du zoom de la caméra."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Should zooming move in the direction of the mouse?"
msgstr "Le zoom doit-il se faire dans la direction de la souris ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Zooming towards the mouse is not supported in the orthographic perspective."
msgstr "Le zoom vers la souris n'est pas pris en charge dans la perspective orthographique."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384
msgctxt "@action:button"
msgid "Zoom toward mouse direction"
msgstr "Zoomer vers la direction de la souris"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:410
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved so that they no longer intersect?"
msgstr "Les modèles dans la zone d'impression doivent-ils être déplacés afin de ne plus se croiser ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415
msgctxt "@option:check"
msgid "Ensure models are kept apart"
msgstr "Veillez à ce que les modèles restent séparés"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:424
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved down to touch the build plate?"
msgstr "Les modèles dans la zone d'impression doivent-ils être abaissés afin de toucher le plateau ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:429
msgctxt "@option:check"
msgid "Automatically drop models to the build plate"
msgstr "Abaisser automatiquement les modèles sur le plateau"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441
msgctxt "@info:tooltip"
msgid "Show caution message in g-code reader."
msgstr "Afficher le message d'avertissement dans le lecteur G-Code."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
msgctxt "@option:check"
msgid "Caution message in g-code reader"
msgstr "Message d'avertissement dans le lecteur G-Code"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:458
msgctxt "@info:tooltip"
msgid "Should layer be forced into compatibility mode?"
msgstr "La couche doit-elle être forcée en mode de compatibilité ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:463
msgctxt "@option:check"
msgid "Force layer view compatibility mode (restart required)"
msgstr "Forcer l'affichage de la couche en mode de compatibilité (redémarrage requis)"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:473
+msgctxt "@info:tooltip"
+msgid "Should Cura open at the location it was closed?"
+msgstr "Est-ce que Cura devrait ouvrir à l'endroit où il a été fermé ?"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:478
+msgctxt "@option:check"
+msgid "Restore window position on start"
+msgstr "Restaurer la position de la fenêtre au démarrage"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:488
msgctxt "@info:tooltip"
msgid "What type of camera rendering should be used?"
msgstr "Quel type de rendu de la caméra doit-il être utilisé?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495
msgctxt "@window:text"
-msgid "Camera rendering: "
-msgstr "Rendu caméra : "
+msgid "Camera rendering:"
+msgstr "Rendu caméra :"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506
msgid "Perspective"
msgstr "Perspective"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507
msgid "Orthographic"
msgstr "Orthographique"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538
msgctxt "@label"
msgid "Opening and saving files"
msgstr "Ouvrir et enregistrer des fichiers"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:545
msgctxt "@info:tooltip"
msgid "Should models be scaled to the build volume if they are too large?"
msgstr "Les modèles doivent-ils être mis à l'échelle du volume d'impression s'ils sont trop grands ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:550
msgctxt "@option:check"
msgid "Scale large models"
msgstr "Réduire la taille des modèles trop grands"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:560
msgctxt "@info:tooltip"
msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?"
msgstr "Un modèle peut apparaître en tout petit si son unité est par exemple en mètres plutôt qu'en millimètres. Ces modèles doivent-ils être agrandis ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:565
msgctxt "@option:check"
msgid "Scale extremely small models"
msgstr "Mettre à l'échelle les modèles extrêmement petits"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575
msgctxt "@info:tooltip"
msgid "Should models be selected after they are loaded?"
msgstr "Les modèles doivent-ils être sélectionnés après leur chargement ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:580
msgctxt "@option:check"
msgid "Select models when loaded"
msgstr "Sélectionner les modèles lorsqu'ils sont chargés"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590
msgctxt "@info:tooltip"
msgid "Should a prefix based on the printer name be added to the print job name automatically?"
msgstr "Un préfixe basé sur le nom de l'imprimante doit-il être automatiquement ajouté au nom de la tâche d'impression ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:595
msgctxt "@option:check"
msgid "Add machine prefix to job name"
msgstr "Ajouter le préfixe de la machine au nom de la tâche"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:605
msgctxt "@info:tooltip"
msgid "Should a summary be shown when saving a project file?"
msgstr "Un résumé doit-il être affiché lors de l'enregistrement d'un fichier de projet ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609
msgctxt "@option:check"
msgid "Show summary dialog when saving project"
msgstr "Afficher la boîte de dialogue du résumé lors de l'enregistrement du projet"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
msgctxt "@info:tooltip"
msgid "Default behavior when opening a project file"
msgstr "Comportement par défaut lors de l'ouverture d'un fichier de projet"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:627
msgctxt "@window:text"
msgid "Default behavior when opening a project file: "
msgstr "Comportement par défaut lors de l'ouverture d'un fichier de projet : "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641
msgctxt "@option:openProject"
msgid "Always ask me this"
msgstr "Toujours me demander"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:642
msgctxt "@option:openProject"
msgid "Always open as a project"
msgstr "Toujours ouvrir comme projet"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:643
msgctxt "@option:openProject"
msgid "Always import models"
msgstr "Toujours importer les modèles"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:679
msgctxt "@info:tooltip"
msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again."
msgstr "Lorsque vous apportez des modifications à un profil puis passez à un autre profil, une boîte de dialogue apparaît, vous demandant si vous souhaitez conserver les modifications. Vous pouvez aussi choisir une option par défaut, et le dialogue ne s'affichera plus."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:52
msgctxt "@label"
msgid "Profiles"
msgstr "Profils"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:693
msgctxt "@window:text"
msgid "Default behavior for changed setting values when switching to a different profile: "
msgstr "Comportement par défaut pour les valeurs de paramètres modifiées lors du passage à un profil différent : "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:707
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157
msgctxt "@option:discardOrKeep"
msgid "Always ask me this"
msgstr "Toujours me demander"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708
msgctxt "@option:discardOrKeep"
msgid "Always discard changed settings"
msgstr "Toujours rejeter les paramètres modifiés"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:709
msgctxt "@option:discardOrKeep"
msgid "Always transfer changed settings to new profile"
msgstr "Toujours transférer les paramètres modifiés dans le nouveau profil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743
msgctxt "@label"
msgid "Privacy"
msgstr "Confidentialité"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:750
msgctxt "@info:tooltip"
msgid "Should Cura check for updates when the program is started?"
msgstr "Cura doit-il vérifier les mises à jour au démarrage du programme ?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:755
msgctxt "@option:check"
msgid "Check for updates on start"
msgstr "Vérifier les mises à jour au démarrage"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:765
msgctxt "@info:tooltip"
msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored."
msgstr "Les données anonymes de votre impression doivent-elles être envoyées à Ultimaker ? Notez qu'aucun modèle, aucune adresse IP ni aucune autre information permettant de vous identifier personnellement ne seront envoyés ou stockés."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:770
msgctxt "@option:check"
msgid "Send (anonymous) print information"
msgstr "Envoyer des informations (anonymes) sur l'impression"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:779
msgctxt "@action:button"
msgid "More information"
msgstr "Plus d'informations"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:774
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:27
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ProfileMenu.qml:23
-msgctxt "@label"
-msgid "Experimental"
-msgstr "Expérimental"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781
-msgctxt "@info:tooltip"
-msgid "Use multi build plate functionality"
-msgstr "Utiliser la fonctionnalité multi-plateau"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786
-msgctxt "@option:check"
-msgid "Use multi build plate functionality (restart required)"
-msgstr "Utiliser la fonctionnalité multi-plateau (redémarrage requis)"
-
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415
msgctxt "@title:tab"
@@ -3363,93 +3347,84 @@ msgid "Printers"
msgstr "Imprimantes"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152
msgctxt "@action:button"
msgid "Rename"
msgstr "Renommer"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:34
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419
msgctxt "@title:tab"
msgid "Profiles"
msgstr "Profils"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:104
msgctxt "@label"
msgid "Create"
msgstr "Créer"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
msgctxt "@label"
msgid "Duplicate"
msgstr "Dupliquer"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:202
msgctxt "@title:window"
msgid "Create Profile"
msgstr "Créer un profil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:204
msgctxt "@info"
msgid "Please provide a name for this profile."
msgstr "Veuillez fournir un nom pour ce profil."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:260
msgctxt "@title:window"
msgid "Duplicate Profile"
msgstr "Dupliquer un profil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:291
msgctxt "@title:window"
msgid "Rename Profile"
msgstr "Renommer le profil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:304
msgctxt "@title:window"
msgid "Import Profile"
msgstr "Importer un profil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:333
msgctxt "@title:window"
msgid "Export Profile"
msgstr "Exporter un profil"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:396
msgctxt "@label %1 is printer name"
msgid "Printer: %1"
msgstr "Imprimante : %1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Default profiles"
-msgstr "Profils par défaut"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Custom profiles"
-msgstr "Personnaliser les profils"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:554
msgctxt "@action:button"
msgid "Update profile with current settings/overrides"
msgstr "Mettre à jour le profil à l'aide des paramètres / forçages actuels"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:561
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:257
msgctxt "@action:button"
msgid "Discard current changes"
msgstr "Ignorer les modifications actuelles"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:580
msgctxt "@action:label"
msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below."
msgstr "Ce profil utilise les paramètres par défaut spécifiés par l'imprimante, de sorte qu'aucun paramètre / forçage n'apparaît dans la liste ci-dessous."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:588
msgctxt "@action:label"
msgid "Your current settings match the selected profile."
msgstr "Vos paramètres actuels correspondent au profil sélectionné."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:606
msgctxt "@title:tab"
msgid "Global Settings"
msgstr "Paramètres généraux"
@@ -3514,35 +3489,35 @@ msgstr "Sans titre"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:68
msgctxt "@label:textbox"
-msgid "search settings"
-msgstr "paramètres de recherche"
+msgid "Search settings"
+msgstr "Paramètres de recherche"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:462
msgctxt "@action:menu"
msgid "Copy value to all extruders"
msgstr "Copier la valeur vers tous les extrudeurs"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:471
msgctxt "@action:menu"
msgid "Copy all changed values to all extruders"
msgstr "Copier toutes les valeurs modifiées vers toutes les extrudeuses"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:508
msgctxt "@action:menu"
msgid "Hide this setting"
msgstr "Masquer ce paramètre"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:521
msgctxt "@action:menu"
msgid "Don't show this setting"
msgstr "Masquer ce paramètre"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
msgctxt "@action:menu"
msgid "Keep this setting visible"
msgstr "Afficher ce paramètre"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434
msgctxt "@action:menu"
msgid "Configure setting visibility..."
@@ -3574,17 +3549,17 @@ msgctxt "@label Header for list of settings."
msgid "Affected By"
msgstr "Touché par"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:187
msgctxt "@label"
msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders."
msgstr "Ce paramètre est toujours partagé par toutes les extrudeuses. Le modifier ici entraînera la modification de la valeur pour toutes les extrudeuses."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:191
msgctxt "@label"
msgid "The value is resolved from per-extruder values "
msgstr "La valeur est résolue à partir des valeurs par extrudeur "
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:230
msgctxt "@label"
msgid ""
"This setting has a value that is different from the profile.\n"
@@ -3595,7 +3570,7 @@ msgstr ""
"\n"
"Cliquez pour restaurer la valeur du profil."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:329
msgctxt "@label"
msgid ""
"This setting is normally calculated, but it currently has an absolute value set.\n"
@@ -3606,6 +3581,13 @@ msgstr ""
"\n"
"Cliquez pour restaurer la valeur calculée."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/NoIntentIcon.qml:31
+msgctxt "@label %1 is filled in with the type of a profile. %2 is filled with a list of numbers (eg '1' or '1, 2')"
+msgid "There is no %1 profile for the configuration in extruder %2. The default intent will be used instead"
+msgid_plural "There is no %1 profile for the configurations in extruders %2. The default intent will be used instead"
+msgstr[0] ""
+msgstr[1] ""
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:144
msgctxt "@button"
msgid "Recommended"
@@ -3646,26 +3628,11 @@ msgctxt "@label"
msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards."
msgstr "Activez l'impression d'une bordure ou plaquette (Brim/Raft). Cela ajoutera une zone plate autour de ou sous votre objet qui est facile à découper par la suite."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:175
-msgctxt "@label"
-msgid "Layer Height"
-msgstr "Hauteur de la couche"
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:206
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:81
msgctxt "@tooltip"
msgid "You have modified some profile settings. If you want to change these go to custom mode."
msgstr "Vous avez modifié certains paramètres du profil. Si vous souhaitez les modifier, allez dans le mode Personnaliser."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:355
-msgctxt "@tooltip"
-msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
-msgstr "Ce profil de qualité n'est pas disponible pour votre matériau et configuration des buses actuels. Veuillez modifier ces derniers pour activer ce profil de qualité."
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449
-msgctxt "@tooltip"
-msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
-msgstr "Un profil personnalisé est actuellement actif. Pour activer le curseur de qualité, choisissez un profil de qualité par défaut dans l'onglet Personnaliser"
-
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:13
msgctxt "@label:Should be short"
msgid "On"
@@ -3676,12 +3643,17 @@ msgctxt "@label:Should be short"
msgid "Off"
msgstr "Off"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:27
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:33
+msgctxt "@label"
+msgid "Experimental"
+msgstr "Expérimental"
+
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:47
msgctxt "@label"
msgid "Profile"
msgstr "Profil"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:94
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:172
msgctxt "@tooltip"
msgid ""
"Some setting/override values are different from the values stored in the profile.\n"
@@ -3692,6 +3664,11 @@ msgstr ""
"\n"
"Cliquez pour ouvrir le gestionnaire de profils."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:160
+msgctxt "@label:header"
+msgid "Custom profiles"
+msgstr "Personnaliser les profils"
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:21
msgctxt "@label shown when we load a Gcode file"
msgid "Print setup disabled. G-code file can not be modified."
@@ -3819,11 +3796,16 @@ msgctxt "@label:category menu label"
msgid "Material"
msgstr "Matériau"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:42
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:46
msgctxt "@label:category menu label"
msgid "Favorites"
msgstr "Favoris"
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:71
+msgctxt "@label:category menu label"
+msgid "Generic"
+msgstr "Générique"
+
#: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25
msgctxt "@label:category menu label"
msgid "Network enabled printers"
@@ -3859,16 +3841,6 @@ msgctxt "@action:inmenu"
msgid "Disable Extruder"
msgstr "Désactiver l'extrudeuse"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63
-msgctxt "@title:menu"
-msgid "&Build plate"
-msgstr "Plateau"
-
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66
-msgctxt "@title:settings"
-msgid "&Profile"
-msgstr "&Profil"
-
#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:19
msgctxt "@action:inmenu menubar:view"
msgid "&Camera position"
@@ -3948,12 +3920,12 @@ msgctxt "@header"
msgid "Configurations"
msgstr "Configurations"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:110
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:112
msgctxt "@label"
msgid "Select configuration"
msgstr "Sélectionner la configuration"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:223
msgctxt "@label"
msgid "Configurations"
msgstr "Configurations"
@@ -3983,12 +3955,12 @@ msgctxt "@label"
msgid "Enabled"
msgstr "Activé"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:251
msgctxt "@label"
msgid "Material"
msgstr "Matériau"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:375
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:378
msgctxt "@label"
msgid "Use glue for better adhesion with this material combination."
msgstr "Utiliser de la colle pour une meilleure adhérence avec cette combinaison de matériaux."
@@ -4405,44 +4377,44 @@ msgctxt "@title:tab"
msgid "Settings"
msgstr "Paramètres"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538
msgctxt "@title:window"
msgid "Closing Cura"
msgstr "Fermeture de Cura"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551
msgctxt "@label"
msgid "Are you sure you want to exit Cura?"
msgstr "Êtes-vous sûr de vouloir quitter Cura ?"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:589
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19
msgctxt "@title:window"
msgid "Open file(s)"
msgstr "Ouvrir le(s) fichier(s)"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:695
msgctxt "@window:title"
msgid "Install Package"
msgstr "Installer le paquet"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:703
msgctxt "@title:window"
msgid "Open File(s)"
msgstr "Ouvrir le(s) fichier(s)"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:706
msgctxt "@text:window"
msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one."
msgstr "Nous avons trouvé au moins un fichier G-Code parmi les fichiers que vous avez sélectionné. Vous ne pouvez ouvrir qu'un seul fichier G-Code à la fois. Si vous souhaitez ouvrir un fichier G-Code, veuillez ne sélectionner qu'un seul fichier de ce type."
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:809
msgctxt "@title:window"
msgid "Add Printer"
msgstr "Ajouter une imprimante"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:817
msgctxt "@title:window"
msgid "What's New"
msgstr "Quoi de neuf"
@@ -4513,17 +4485,17 @@ msgctxt "@title:window"
msgid "About Cura"
msgstr "À propos de Cura"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:56
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:57
msgctxt "@label"
msgid "version: %1"
msgstr "version : %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:72
msgctxt "@label"
msgid "End-to-end solution for fused filament 3D printing."
msgstr "Solution complète pour l'impression 3D par dépôt de filament fondu."
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:84
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:85
msgctxt "@info:credit"
msgid ""
"Cura is developed by Ultimaker B.V. in cooperation with the community.\n"
@@ -4532,122 +4504,122 @@ msgstr ""
"Cura a été développé par Ultimaker B.V. en coopération avec la communauté Ultimaker.\n"
"Cura est fier d'utiliser les projets open source suivants :"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
msgctxt "@label"
msgid "Graphical user interface"
msgstr "Interface utilisateur graphique"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
msgctxt "@label"
msgid "Application framework"
msgstr "Cadre d'application"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
msgctxt "@label"
msgid "G-code generator"
msgstr "Générateur G-Code"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:138
msgctxt "@label"
msgid "Interprocess communication library"
msgstr "Bibliothèque de communication interprocess"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:139
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
msgctxt "@label"
msgid "Programming language"
msgstr "Langage de programmation"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
msgctxt "@label"
msgid "GUI framework"
msgstr "Cadre IUG"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
msgctxt "@label"
msgid "GUI framework bindings"
msgstr "Liens cadre IUG"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
msgctxt "@label"
msgid "C/C++ Binding library"
msgstr "Bibliothèque C/C++ Binding"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
msgctxt "@label"
msgid "Data interchange format"
msgstr "Format d'échange de données"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
msgctxt "@label"
msgid "Support library for scientific computing"
msgstr "Prise en charge de la bibliothèque pour le calcul scientifique"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
msgctxt "@label"
msgid "Support library for faster math"
msgstr "Prise en charge de la bibliothèque pour des maths plus rapides"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
msgctxt "@label"
msgid "Support library for handling STL files"
msgstr "Prise en charge de la bibliothèque pour le traitement des fichiers STL"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
msgctxt "@label"
msgid "Support library for handling planar objects"
msgstr "Prise en charge de la bibliothèque pour le traitement des objets planaires"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
msgctxt "@label"
msgid "Support library for handling triangular meshes"
msgstr "Prise en charge de la bibliothèque pour le traitement des mailles triangulaires"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
msgctxt "@label"
msgid "Support library for analysis of complex networks"
msgstr "Prise en charge de la bibliothèque pour l'analyse de réseaux complexes"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
msgctxt "@label"
msgid "Support library for handling 3MF files"
msgstr "Prise en charge de la bibliothèque pour le traitement des fichiers 3MF"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
msgctxt "@label"
msgid "Support library for file metadata and streaming"
msgstr "Prise en charge de la bibliothèque pour les métadonnées et le streaming de fichiers"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
msgctxt "@label"
msgid "Serial communication library"
msgstr "Bibliothèque de communication série"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
msgctxt "@label"
msgid "ZeroConf discovery library"
msgstr "Bibliothèque de découverte ZeroConf"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
msgctxt "@label"
msgid "Polygon clipping library"
msgstr "Bibliothèque de découpe polygone"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:156
msgctxt "@Label"
msgid "Python HTTP library"
msgstr "Bibliothèque Python HTTP"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:157
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
msgctxt "@label"
msgid "Font"
msgstr "Police"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
msgctxt "@label"
msgid "SVG icons"
msgstr "Icônes SVG"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:160
msgctxt "@label"
msgid "Linux cross-distribution application deployment"
msgstr "Déploiement d'applications sur multiples distributions Linux"
@@ -4667,32 +4639,27 @@ msgctxt "@title:window"
msgid "Save Project"
msgstr "Enregistrer le projet"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149
-msgctxt "@action:label"
-msgid "Build plate"
-msgstr "Plateau"
-
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:177
msgctxt "@action:label"
msgid "Extruder %1"
msgstr "Extrudeuse %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:192
msgctxt "@action:label"
msgid "%1 & material"
msgstr "%1 & matériau"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:194
msgctxt "@action:label"
msgid "Material"
msgstr "Matériau"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
msgctxt "@action:label"
msgid "Don't show project summary on save again"
msgstr "Ne pas afficher à nouveau le résumé du projet lors de l'enregistrement"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:302
msgctxt "@action:button"
msgid "Save"
msgstr "Enregistrer"
@@ -4868,12 +4835,12 @@ msgctxt "@label"
msgid "Troubleshooting"
msgstr "Dépannage"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:211
msgctxt "@label"
msgid "Printer name"
msgstr "Nom de l'imprimante"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:224
msgctxt "@text"
msgid "Please give your printer a name"
msgstr "Veuillez donner un nom à votre imprimante"
@@ -4932,6 +4899,31 @@ msgctxt "@button"
msgid "Get started"
msgstr "Prise en main"
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:27
+msgctxt "@info:tooltip"
+msgid "3D View"
+msgstr "Vue 3D"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:40
+msgctxt "@info:tooltip"
+msgid "Front View"
+msgstr "Vue de face"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:53
+msgctxt "@info:tooltip"
+msgid "Top View"
+msgstr "Vue du dessus"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:66
+msgctxt "@info:tooltip"
+msgid "Left View"
+msgstr "Vue gauche"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:79
+msgctxt "@info:tooltip"
+msgid "Right View"
+msgstr "Vue droite"
+
#: MachineSettingsAction/plugin.json
msgctxt "description"
msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)."
@@ -4992,16 +4984,6 @@ msgctxt "name"
msgid "Model Checker"
msgstr "Contrôleur de modèle"
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "description"
-msgid "Dump the contents of all settings to a HTML file."
-msgstr "Exporter les contenus de tous les paramètres vers un fichier HTML."
-
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "name"
-msgid "God Mode"
-msgstr "Mode God"
-
#: FirmwareUpdater/plugin.json
msgctxt "description"
msgid "Provides a machine actions for updating firmware."
@@ -5012,16 +4994,6 @@ msgctxt "name"
msgid "Firmware Updater"
msgstr "Programme de mise à jour du firmware"
-#: ProfileFlattener/plugin.json
-msgctxt "description"
-msgid "Create a flattened quality changes profile."
-msgstr "Créer un profil de changements de qualité aplati."
-
-#: ProfileFlattener/plugin.json
-msgctxt "name"
-msgid "Profile Flattener"
-msgstr "Aplatisseur de profil"
-
#: AMFReader/plugin.json
msgctxt "description"
msgid "Provides support for reading AMF files."
@@ -5222,6 +5194,16 @@ msgctxt "name"
msgid "Version Upgrade 3.3 to 3.4"
msgstr "Mise à niveau de 3.3 vers 3.4"
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "description"
+msgid "Upgrades configurations from Cura 4.3 to Cura 4.4."
+msgstr "Configurations des mises à niveau de Cura 4.3 vers Cura 4.4."
+
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "name"
+msgid "Version Upgrade 4.3 to 4.4"
+msgstr "Mise à niveau de 4.3 vers 4.4"
+
#: VersionUpgrade/VersionUpgrade25to26/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 2.5 to Cura 2.6."
@@ -5422,16 +5404,6 @@ msgctxt "name"
msgid "Cura Profile Writer"
msgstr "Générateur de profil Cura"
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "description"
-msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
-msgstr "Permet aux fabricants de matériaux de créer de nouveaux matériaux et profils de qualité à l'aide d'une interface utilisateur ad hoc."
-
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "name"
-msgid "Print Profile Assistant"
-msgstr "Assistant de profil d'impression"
-
#: 3MFWriter/plugin.json
msgctxt "description"
msgid "Provides support for writing 3MF files."
@@ -5472,6 +5444,158 @@ msgctxt "name"
msgid "Cura Profile Reader"
msgstr "Lecteur de profil Cura"
+#~ msgctxt "@item:inmenu"
+#~ msgid "Flatten active settings"
+#~ msgstr "Aplatir les paramètres actifs"
+
+#~ msgctxt "@info:status"
+#~ msgid "Profile has been flattened & activated."
+#~ msgstr "Le profil a été aplati et activé."
+
+#~ msgctxt "X3g Writer Plugin Description"
+#~ msgid "Writes X3g to files"
+#~ msgstr "Écrit X3G dans des fichiers"
+
+#~ msgctxt "X3g Writer File Description"
+#~ msgid "X3g File"
+#~ msgstr "Fichier X3G"
+
+#~ msgctxt "X3G Writer File Description"
+#~ msgid "X3G File"
+#~ msgstr "Fichier X3G"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Open Compressed Triangle Mesh"
+#~ msgstr "Ouvrir le maillage triangulaire compressé"
+
+#~ msgctxt "@item:inmenu"
+#~ msgid "Profile Assistant"
+#~ msgstr "Assistant de profil"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Profile Assistant"
+#~ msgstr "Assistant de profil"
+
+#~ msgctxt "@action:button"
+#~ msgid "Retry"
+#~ msgstr "Réessayer"
+
+#~ msgctxt "@label:table_header"
+#~ msgid "Print Core"
+#~ msgstr "Print Core"
+
+#~ msgctxt "@label"
+#~ msgid "Don't support overlap with other models"
+#~ msgstr "Ne pas prendre en charge le chevauchement avec d'autres modèles"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for overlap with other models"
+#~ msgstr "Modifier les paramètres de chevauchement avec d'autres modèles"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for infill of other models"
+#~ msgstr "Modifier les paramètres de remplissage d'autres modèles"
+
+#~ msgctxt "@action:ComboBox option"
+#~ msgid "Update existing"
+#~ msgstr "Mettre à jour l'existant"
+
+#~ msgctxt "@label"
+#~ msgid "Not supported"
+#~ msgstr "Non pris en charge"
+
+#~ msgctxt "@action:button"
+#~ msgid "Previous"
+#~ msgstr "Précédent"
+
+#~ msgctxt "@label"
+#~ msgid "Tip"
+#~ msgstr "Astuce"
+
+#~ msgctxt "@label"
+#~ msgid "Print experiment"
+#~ msgstr "Test d'impression"
+
+#~ msgctxt "@label"
+#~ msgid "Checklist"
+#~ msgstr "Liste de contrôle"
+
+#~ msgctxt "@label"
+#~ msgid "Please select any upgrades made to this Ultimaker 2."
+#~ msgstr "Sélectionnez les mises à niveau disponibles pour cet Ultimaker 2."
+
+#~ msgctxt "@label"
+#~ msgid "Olsson Block"
+#~ msgstr "Blocage Olsson"
+
+#~ msgctxt "@window:text"
+#~ msgid "Camera rendering: "
+#~ msgstr "Rendu caméra : "
+
+#~ msgctxt "@info:tooltip"
+#~ msgid "Use multi build plate functionality"
+#~ msgstr "Utiliser la fonctionnalité multi-plateau"
+
+#~ msgctxt "@option:check"
+#~ msgid "Use multi build plate functionality (restart required)"
+#~ msgstr "Utiliser la fonctionnalité multi-plateau (redémarrage requis)"
+
+#~ msgctxt "@label"
+#~ msgid "Default profiles"
+#~ msgstr "Profils par défaut"
+
+#~ msgctxt "@label:textbox"
+#~ msgid "search settings"
+#~ msgstr "paramètres de recherche"
+
+#~ msgctxt "@label"
+#~ msgid "Layer Height"
+#~ msgstr "Hauteur de la couche"
+
+#~ msgctxt "@tooltip"
+#~ msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
+#~ msgstr "Ce profil de qualité n'est pas disponible pour votre matériau et configuration des buses actuels. Veuillez modifier ces derniers pour activer ce profil de qualité."
+
+#~ msgctxt "@tooltip"
+#~ msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
+#~ msgstr "Un profil personnalisé est actuellement actif. Pour activer le curseur de qualité, choisissez un profil de qualité par défaut dans l'onglet Personnaliser"
+
+#~ msgctxt "@title:menu"
+#~ msgid "&Build plate"
+#~ msgstr "Plateau"
+
+#~ msgctxt "@title:settings"
+#~ msgid "&Profile"
+#~ msgstr "&Profil"
+
+#~ msgctxt "@action:label"
+#~ msgid "Build plate"
+#~ msgstr "Plateau"
+
+#~ msgctxt "description"
+#~ msgid "Dump the contents of all settings to a HTML file."
+#~ msgstr "Exporter les contenus de tous les paramètres vers un fichier HTML."
+
+#~ msgctxt "name"
+#~ msgid "God Mode"
+#~ msgstr "Mode God"
+
+#~ msgctxt "description"
+#~ msgid "Create a flattened quality changes profile."
+#~ msgstr "Créer un profil de changements de qualité aplati."
+
+#~ msgctxt "name"
+#~ msgid "Profile Flattener"
+#~ msgstr "Aplatisseur de profil"
+
+#~ msgctxt "description"
+#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
+#~ msgstr "Permet aux fabricants de matériaux de créer de nouveaux matériaux et profils de qualité à l'aide d'une interface utilisateur ad hoc."
+
+#~ msgctxt "name"
+#~ msgid "Print Profile Assistant"
+#~ msgstr "Assistant de profil d'impression"
+
#~ msgctxt "@info:status"
#~ msgid "Connected over the network."
#~ msgstr "Connecté sur le réseau."
diff --git a/resources/i18n/fr_FR/fdmextruder.def.json.po b/resources/i18n/fr_FR/fdmextruder.def.json.po
index 45dd52774f..59ade887b6 100644
--- a/resources/i18n/fr_FR/fdmextruder.def.json.po
+++ b/resources/i18n/fr_FR/fdmextruder.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-03-13 14:00+0200\n"
"Last-Translator: Bothof \n"
"Language-Team: French\n"
diff --git a/resources/i18n/fr_FR/fdmprinter.def.json.po b/resources/i18n/fr_FR/fdmprinter.def.json.po
index e21e5ea1e6..9779482577 100644
--- a/resources/i18n/fr_FR/fdmprinter.def.json.po
+++ b/resources/i18n/fr_FR/fdmprinter.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-07-29 15:51+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: French , French \n"
@@ -1030,6 +1030,17 @@ msgctxt "bottom_layers description"
msgid "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number."
msgstr "Le nombre de couches inférieures. Lorsqu'elle est calculée par l'épaisseur du dessous, cette valeur est arrondie à un nombre entier."
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers label"
+msgid "Initial Bottom Layers"
+msgstr "Couches inférieures initiales"
+
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers description"
+msgid "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number."
+msgstr "Le nombre de couches inférieures initiales à partir du haut du plateau. Lorsqu'elle est calculée par l'épaisseur du dessous, cette valeur est arrondie"
+" à un nombre entier."
+
#: fdmprinter.def.json
msgctxt "top_bottom_pattern label"
msgid "Top/Bottom Pattern"
@@ -1423,8 +1434,7 @@ msgstr "Activer l'étirage"
#: fdmprinter.def.json
msgctxt "ironing_enabled description"
msgid "Go over the top surface one additional time, but this time extruding very little material. This is meant to melt the plastic on top further, creating a smoother surface. The pressure in the nozzle chamber is kept high so that the creases in the surface are filled with material."
-msgstr "Allez au-dessus de la surface une fois supplémentaire, mais en extrudant très peu de matériau. Cela signifie de faire fondre le plastique en haut un peu"
-" plus, pour créer une surface lisse. La pression dans la chambre de la buse est maintenue élevée afin que les plis de la surface soient remplis de matériau."
+msgstr "Allez au-dessus de la surface une fois supplémentaire, mais en extrudant très peu de matériau. Cela signifie de faire fondre le plastique en haut un peu plus, pour créer une surface lisse. La pression dans la chambre de la buse est maintenue élevée afin que les plis de la surface soient remplis de matériau."
#: fdmprinter.def.json
msgctxt "ironing_only_highest_layer label"
@@ -1709,8 +1719,7 @@ msgstr "Randomiser le démarrage du remplissage"
#: fdmprinter.def.json
msgctxt "infill_randomize_start_location description"
msgid "Randomize which infill line is printed first. This prevents one segment becoming the strongest, but it does so at the cost of an additional travel move."
-msgstr "Randomisez la ligne de remplissage qui est imprimée en premier. Cela empêche un segment de devenir plus fort, mais cela se fait au prix d'un déplacement"
-" supplémentaire."
+msgstr "Randomisez la ligne de remplissage qui est imprimée en premier. Cela empêche un segment de devenir plus fort, mais cela se fait au prix d'un déplacement supplémentaire."
#: fdmprinter.def.json
msgctxt "infill_multiplier label"
@@ -3569,9 +3578,7 @@ msgstr "Direction de ligne de remplissage du support"
#: fdmprinter.def.json
msgctxt "support_infill_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angle 0 degrees."
-msgstr "Une liste de sens de ligne (exprimés en nombres entiers) à utiliser. Les éléments de la liste sont utilisés de manière séquentielle à mesure de l'avancement"
-" des couches. La liste reprend depuis le début lorsque la fin est atteinte. Les éléments de la liste sont séparés par des virgules et la liste entière"
-" est encadrée entre crochets. La valeur par défaut est une liste vide, ce qui signifie que l'angle par défaut est utilisé (0 degré)."
+msgstr "Une liste de sens de ligne (exprimés en nombres entiers) à utiliser. Les éléments de la liste sont utilisés de manière séquentielle à mesure de l'avancement des couches. La liste reprend depuis le début lorsque la fin est atteinte. Les éléments de la liste sont séparés par des virgules et la liste entière est encadrée entre crochets. La valeur par défaut est une liste vide, ce qui signifie que l'angle par défaut est utilisé (0 degré)."
#: fdmprinter.def.json
msgctxt "support_brim_enable label"
@@ -3985,8 +3992,9 @@ msgstr "Surface minimale de l'interface de support"
#: fdmprinter.def.json
msgctxt "minimum_interface_area description"
-msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
-msgstr "Taille minimale de la surface des polygones d'interface de support : les polygones dont la surface est inférieure à cette valeur ne seront pas générés."
+msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Taille minimale de la surface des polygones d'interface de support. Les polygones dont la surface est inférieure à cette valeur ne seront pas imprimés"
+" comme support normal."
#: fdmprinter.def.json
msgctxt "minimum_roof_area label"
@@ -3995,8 +4003,9 @@ msgstr "Surface minimale du plafond de support"
#: fdmprinter.def.json
msgctxt "minimum_roof_area description"
-msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "Taille minimale de la surface des plafonds du support : les polygones dont la surface est inférieure à cette valeur ne seront pas générés."
+msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Taille minimale de la surface des plafonds du support. Les polygones dont la surface est inférieure à cette valeur ne seront pas imprimés comme support"
+" normal."
#: fdmprinter.def.json
msgctxt "minimum_bottom_area label"
@@ -4005,8 +4014,8 @@ msgstr "Surface minimale du bas de support"
#: fdmprinter.def.json
msgctxt "minimum_bottom_area description"
-msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "Taille minimale de la surface des bas du support : les polygones dont la surface est inférieure à cette valeur ne seront pas générés."
+msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Taille minimale de la surface des bas du support. Les polygones dont la surface est inférieure à cette valeur ne seront pas imprimés comme support normal."
#: fdmprinter.def.json
msgctxt "support_interface_offset label"
@@ -4046,10 +4055,7 @@ msgstr "Direction de ligne d'interface du support"
#: fdmprinter.def.json
msgctxt "support_interface_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Une liste de sens de ligne (exprimés en nombres entiers) à utiliser. Les éléments de la liste sont utilisés de manière séquentielle à mesure de l'avancement"
-" des couches. La liste reprend depuis le début lorsque la fin est atteinte. Les éléments de la liste sont séparés par des virgules et la liste entière"
-" est encadrée entre crochets. La valeur par défaut est une liste vide, ce qui signifie que les angles par défaut sont utilisés (alternative entre 45 et"
-" 135 degrés si les interfaces sont assez épaisses ou 90 degrés)."
+msgstr "Une liste de sens de ligne (exprimés en nombres entiers) à utiliser. Les éléments de la liste sont utilisés de manière séquentielle à mesure de l'avancement des couches. La liste reprend depuis le début lorsque la fin est atteinte. Les éléments de la liste sont séparés par des virgules et la liste entière est encadrée entre crochets. La valeur par défaut est une liste vide, ce qui signifie que les angles par défaut sont utilisés (alternative entre 45 et 135 degrés si les interfaces sont assez épaisses ou 90 degrés)."
#: fdmprinter.def.json
msgctxt "support_roof_angles label"
@@ -4059,10 +4065,7 @@ msgstr "Direction de la ligne de plafond de support"
#: fdmprinter.def.json
msgctxt "support_roof_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Une liste de sens de ligne (exprimés en nombres entiers) à utiliser. Les éléments de la liste sont utilisés de manière séquentielle à mesure de l'avancement"
-" des couches. La liste reprend depuis le début lorsque la fin est atteinte. Les éléments de la liste sont séparés par des virgules et la liste entière"
-" est encadrée entre crochets. La valeur par défaut est une liste vide, ce qui signifie que les angles par défaut sont utilisés (alternative entre 45 et"
-" 135 degrés si les interfaces sont assez épaisses ou 90 degrés)."
+msgstr "Une liste de sens de ligne (exprimés en nombres entiers) à utiliser. Les éléments de la liste sont utilisés de manière séquentielle à mesure de l'avancement des couches. La liste reprend depuis le début lorsque la fin est atteinte. Les éléments de la liste sont séparés par des virgules et la liste entière est encadrée entre crochets. La valeur par défaut est une liste vide, ce qui signifie que les angles par défaut sont utilisés (alternative entre 45 et 135 degrés si les interfaces sont assez épaisses ou 90 degrés)."
#: fdmprinter.def.json
msgctxt "support_bottom_angles label"
@@ -4072,10 +4075,7 @@ msgstr "Direction de la ligne de bas de support"
#: fdmprinter.def.json
msgctxt "support_bottom_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Une liste de sens de ligne (exprimés en nombres entiers) à utiliser. Les éléments de la liste sont utilisés de manière séquentielle à mesure de l'avancement"
-" des couches. La liste reprend depuis le début lorsque la fin est atteinte. Les éléments de la liste sont séparés par des virgules et la liste entière"
-" est encadrée entre crochets. La valeur par défaut est une liste vide, ce qui signifie que les angles par défaut sont utilisés (alternative entre 45 et"
-" 135 degrés si les interfaces sont assez épaisses ou 90 degrés)."
+msgstr "Une liste de sens de ligne (exprimés en nombres entiers) à utiliser. Les éléments de la liste sont utilisés de manière séquentielle à mesure de l'avancement des couches. La liste reprend depuis le début lorsque la fin est atteinte. Les éléments de la liste sont séparés par des virgules et la liste entière est encadrée entre crochets. La valeur par défaut est une liste vide, ce qui signifie que les angles par défaut sont utilisés (alternative entre 45 et 135 degrés si les interfaces sont assez épaisses ou 90 degrés)."
#: fdmprinter.def.json
msgctxt "support_fan_enable label"
@@ -4801,6 +4801,36 @@ msgctxt "remove_empty_first_layers description"
msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle."
msgstr "Supprimer les couches vides sous la première couche imprimée si elles sont présentes. Le fait de désactiver ce paramètre peut entraîner l'apparition de premières couches vides si le paramètre Tolérance à la découpe est défini sur Exclusif ou Milieu."
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution label"
+msgid "Maximum Resolution"
+msgstr "Résolution maximum"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution description"
+msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
+msgstr "Taille minimum d'un segment de ligne après découpage. Si vous augmentez cette valeur, la maille aura une résolution plus faible. Cela peut permettre à l'imprimante de suivre la vitesse à laquelle elle doit traiter le G-Code et augmentera la vitesse de découpe en enlevant des détails de la maille que l'imprimante ne peut pas traiter de toute manière."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution label"
+msgid "Maximum Travel Resolution"
+msgstr "Résolution de déplacement maximum"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution description"
+msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
+msgstr "Taille minimale d'un segment de ligne de déplacement après la découpe. Si vous augmentez cette valeur, les mouvements de déplacement auront des coins moins lisses. Cela peut permettre à l'imprimante de suivre la vitesse à laquelle elle doit traiter le G-Code, mais cela peut réduire la précision de l'évitement du modèle."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation label"
+msgid "Maximum Deviation"
+msgstr "Écart maximum"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation description"
+msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
+msgstr "L'écart maximum autorisé lors de la réduction de la résolution pour le paramètre Résolution maximum. Si vous augmentez cette valeur, l'impression sera moins précise, mais le G-Code sera plus petit. L'écart maximum est une limite pour la résolution maximum. Donc si les deux entrent en conflit, l'Écart maximum restera valable."
+
#: fdmprinter.def.json
msgctxt "blackmagic label"
msgid "Special Modes"
@@ -5176,38 +5206,6 @@ msgctxt "minimum_polygon_circumference description"
msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details."
msgstr "Les polygones en couches tranchées dont la circonférence est inférieure à cette valeur seront filtrés. Des valeurs élevées permettent d'obtenir un maillage de meilleure résolution mais augmentent le temps de découpe. Cette option est principalement destinée aux imprimantes SLA haute résolution et aux modèles 3D de très petite taille avec beaucoup de détails."
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution label"
-msgid "Maximum Resolution"
-msgstr "Résolution maximum"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution description"
-msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
-msgstr "Taille minimum d'un segment de ligne après découpage. Si vous augmentez cette valeur, la maille aura une résolution plus faible. Cela peut permettre à l'imprimante de suivre la vitesse à laquelle elle doit traiter le G-Code et augmentera la vitesse de découpe en enlevant des détails de la maille que l'imprimante ne peut pas traiter de toute manière."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution label"
-msgid "Maximum Travel Resolution"
-msgstr "Résolution de déplacement maximum"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution description"
-msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
-msgstr "Taille minimale d'un segment de ligne de déplacement après la découpe. Si vous augmentez cette valeur, les mouvements de déplacement auront des coins moins lisses. Cela peut permettre à l'imprimante de suivre la vitesse à laquelle elle doit traiter le G-Code, mais cela peut réduire la précision de l'évitement du modèle."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation label"
-msgid "Maximum Deviation"
-msgstr "Écart maximum"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation description"
-msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
-msgstr "L'écart maximum autorisé lors de la réduction de la résolution pour le paramètre Résolution maximum. Si vous augmentez cette valeur, l'impression sera"
-" moins précise, mais le G-Code sera plus petit. L'écart maximum est une limite pour la résolution maximum. Donc si les deux entrent en conflit, l'Écart"
-" maximum restera valable."
-
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
msgid "Break Up Support In Chunks"
@@ -5348,16 +5346,6 @@ msgctxt "coasting_speed description"
msgid "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops."
msgstr "Vitesse de déplacement pendant une roue libre, par rapport à la vitesse de déplacement pendant l'extrusion. Une valeur légèrement inférieure à 100 % est conseillée car, lors du mouvement en roue libre, la pression dans le tube bowden chute."
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation label"
-msgid "Alternate Skin Rotation"
-msgstr "Alterner la rotation dans les couches extérieures"
-
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation description"
-msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
-msgstr "Alterne le sens d'impression des couches du dessus/dessous. Elles sont généralement imprimées uniquement en diagonale. Ce paramètre ajoute les sens X uniquement et Y uniquement."
-
#: fdmprinter.def.json
msgctxt "cross_infill_pocket_size label"
msgid "Cross 3D Pocket Size"
@@ -5530,23 +5518,24 @@ msgstr "Distance moyenne entre les points ajoutés aléatoirement sur chaque seg
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset label"
-msgid "Flow rate compensation max extrusion offset"
+msgid "Flow Rate Compensation Max Extrusion Offset"
msgstr "Décalage d'extrusion max. pour compensation du débit"
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset description"
-msgid "The maximum distance in mm to compensate."
-msgstr "Distance de compensation maximum en mm."
+msgid "The maximum distance in mm to move the filament to compensate for changes in flow rate."
+msgstr "La distance maximale en mm pour déplacer le filament afin de compenser les variations du débit."
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor label"
-msgid "Flow rate compensation factor"
+msgid "Flow Rate Compensation Factor"
msgstr "Facteur de compensation du débit"
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor description"
-msgid "The multiplication factor for the flow rate -> distance translation."
-msgstr "Facteur de multiplication pour le débit -> translation de la distance."
+msgid "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."
+msgstr "La distance de déplacement du filament pour compenser les variations du débit, en pourcentage de la distance de déplacement du filament en une seconde"
+" d'extrusion."
#: fdmprinter.def.json
msgctxt "wireframe_enabled label"
@@ -5839,13 +5828,14 @@ msgstr "Différence de hauteur de la couche suivante par rapport à la précéde
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold label"
-msgid "Adaptive Layers Threshold"
-msgstr "Limite des couches adaptatives"
+msgid "Adaptive Layers Topography Size"
+msgstr "Taille de la topographie des couches adaptatives"
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold description"
-msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
-msgstr "Limite indiquant d'utiliser ou non une couche plus petite. Ce nombre est comparé à la tangente de la pente la plus raide d'une couche."
+msgid "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."
+msgstr "Distance horizontale cible entre deux couches adjacentes. La réduction de ce paramètre entraîne l'utilisation de couches plus fines pour rapprocher les"
+" bords des couches."
#: fdmprinter.def.json
msgctxt "wall_overhang_angle label"
@@ -5854,8 +5844,9 @@ msgstr "Angle de parois en porte-à-faux"
#: fdmprinter.def.json
msgctxt "wall_overhang_angle description"
-msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
-msgstr "Les parois ayant un angle supérieur à cette valeur seront imprimées en utilisant les paramètres de parois en porte-à-faux. Si la valeur est 90, aucune paroi ne sera considérée comme étant en porte-à-faux."
+msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging. Overhang that gets supported by support will not be treated as overhang either."
+msgstr "Les parois ayant un angle supérieur à cette valeur seront imprimées en utilisant les paramètres de parois en porte-à-faux. Si la valeur est 90, aucune"
+" paroi ne sera considérée comme étant en porte-à-faux. La saillie soutenue par le support ne sera pas non plus considérée comme étant en porte-à-faux."
#: fdmprinter.def.json
msgctxt "wall_overhang_speed_factor label"
@@ -6234,18 +6225,18 @@ msgstr "Vitesse de petite structure"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor description"
-msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
msgstr "Les petites structures seront imprimées à ce pourcentage de la vitesse d'impression normale. Une impression plus lente peut aider à l'adhésion et à la"
" précision."
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 label"
-msgid "First Layer Speed"
-msgstr "Vitesse de la première couche"
+msgid "Small Feature Initial Layer Speed"
+msgstr "Vitesse de la couche initiale de petite structure"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 description"
-msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
msgstr "Les petites structures sur la première couche seront imprimées à ce pourcentage de la vitesse d'impression normale. Une impression plus lente peut aider"
" à l'adhésion et à la précision."
@@ -6309,6 +6300,66 @@ msgctxt "mesh_rotation_matrix description"
msgid "Transformation matrix to be applied to the model when loading it from file."
msgstr "Matrice de transformation à appliquer au modèle lors de son chargement depuis le fichier."
+#~ msgctxt "minimum_interface_area description"
+#~ msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Taille minimale de la surface des polygones d'interface de support : les polygones dont la surface est inférieure à cette valeur ne seront pas générés."
+
+#~ msgctxt "minimum_roof_area description"
+#~ msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Taille minimale de la surface des plafonds du support : les polygones dont la surface est inférieure à cette valeur ne seront pas générés."
+
+#~ msgctxt "minimum_bottom_area description"
+#~ msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Taille minimale de la surface des bas du support : les polygones dont la surface est inférieure à cette valeur ne seront pas générés."
+
+#~ msgctxt "skin_alternate_rotation label"
+#~ msgid "Alternate Skin Rotation"
+#~ msgstr "Alterner la rotation dans les couches extérieures"
+
+#~ msgctxt "skin_alternate_rotation description"
+#~ msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
+#~ msgstr "Alterne le sens d'impression des couches du dessus/dessous. Elles sont généralement imprimées uniquement en diagonale. Ce paramètre ajoute les sens X uniquement et Y uniquement."
+
+#~ msgctxt "flow_rate_max_extrusion_offset label"
+#~ msgid "Flow rate compensation max extrusion offset"
+#~ msgstr "Décalage d'extrusion max. pour compensation du débit"
+
+#~ msgctxt "flow_rate_max_extrusion_offset description"
+#~ msgid "The maximum distance in mm to compensate."
+#~ msgstr "Distance de compensation maximum en mm."
+
+#~ msgctxt "flow_rate_extrusion_offset_factor label"
+#~ msgid "Flow rate compensation factor"
+#~ msgstr "Facteur de compensation du débit"
+
+#~ msgctxt "flow_rate_extrusion_offset_factor description"
+#~ msgid "The multiplication factor for the flow rate -> distance translation."
+#~ msgstr "Facteur de multiplication pour le débit -> translation de la distance."
+
+#~ msgctxt "adaptive_layer_height_threshold label"
+#~ msgid "Adaptive Layers Threshold"
+#~ msgstr "Limite des couches adaptatives"
+
+#~ msgctxt "adaptive_layer_height_threshold description"
+#~ msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
+#~ msgstr "Limite indiquant d'utiliser ou non une couche plus petite. Ce nombre est comparé à la tangente de la pente la plus raide d'une couche."
+
+#~ msgctxt "wall_overhang_angle description"
+#~ msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
+#~ msgstr "Les parois ayant un angle supérieur à cette valeur seront imprimées en utilisant les paramètres de parois en porte-à-faux. Si la valeur est 90, aucune paroi ne sera considérée comme étant en porte-à-faux."
+
+#~ msgctxt "small_feature_speed_factor description"
+#~ msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "Les petites structures seront imprimées à ce pourcentage de la vitesse d'impression normale. Une impression plus lente peut aider à l'adhésion et à la précision."
+
+#~ msgctxt "small_feature_speed_factor_0 label"
+#~ msgid "First Layer Speed"
+#~ msgstr "Vitesse de la première couche"
+
+#~ msgctxt "small_feature_speed_factor_0 description"
+#~ msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "Les petites structures sur la première couche seront imprimées à ce pourcentage de la vitesse d'impression normale. Une impression plus lente peut aider à l'adhésion et à la précision."
+
#~ msgctxt "ironing_enabled description"
#~ msgid "Go over the top surface one additional time, but without extruding material. This is meant to melt the plastic on top further, creating a smoother surface."
#~ msgstr "Aller au-dessus de la surface supérieure une fois supplémentaire, mais sans extruder de matériau. Cela signifie de faire fondre le plastique en haut un peu plus, pour créer une surface lisse."
diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po
index 0d4d32caef..b215eae599 100644
--- a/resources/i18n/it_IT/cura.po
+++ b/resources/i18n/it_IT/cura.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0200\n"
+"POT-Creation-Date: 2019-11-05 13:13+0100\n"
"PO-Revision-Date: 2019-07-29 15:51+0100\n"
"Last-Translator: Lionbridge \n"
"Language-Team: Italian , Italian \n"
@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.1.1\n"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:30
msgctxt "@action"
msgid "Machine Settings"
msgstr "Impostazioni macchina"
@@ -40,13 +40,13 @@ msgctxt "@item:inlistbox"
msgid "G-code File"
msgstr "File G-Code"
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:66
msgctxt "@error:not supported"
msgid "GCodeWriter does not support non-text mode."
msgstr "GCodeWriter non supporta la modalità non di testo."
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:72
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:88
msgctxt "@warning:status"
msgid "Please prepare G-code before exporting."
msgstr "Preparare il codice G prima dell’esportazione."
@@ -56,7 +56,7 @@ msgctxt "@info:title"
msgid "3D Model Assistant"
msgstr "Assistente modello 3D"
-#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:90
+#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:92
#, python-brace-format
msgctxt "@info:status"
msgid ""
@@ -75,16 +75,6 @@ msgctxt "@action"
msgid "Update Firmware"
msgstr "Aggiornamento firmware"
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23
-msgctxt "@item:inmenu"
-msgid "Flatten active settings"
-msgstr "Impostazioni attive profilo appiattito"
-
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35
-msgctxt "@info:status"
-msgid "Profile has been flattened & activated."
-msgstr "Il profilo è stato appiattito e attivato."
-
#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "AMF File"
@@ -125,21 +115,6 @@ msgctxt "@message"
msgid "Print in Progress"
msgstr "Stampa in corso"
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
-msgctxt "X3g Writer Plugin Description"
-msgid "Writes X3g to files"
-msgstr "Scrive X3g sui file"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21
-msgctxt "X3g Writer File Description"
-msgid "X3g File"
-msgstr "File X3g"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15
-msgctxt "X3G Writer File Description"
-msgid "X3G File"
-msgstr "File X3G"
-
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17
#: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17
msgctxt "@item:inlistbox"
@@ -211,9 +186,9 @@ msgid "Could not save to removable drive {0}: {1}"
msgstr "Impossibile salvare su unità rimovibile {0}: {1}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1634
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:139
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:146
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1668
msgctxt "@info:title"
msgid "Error"
msgstr "Errore"
@@ -243,8 +218,8 @@ msgstr "Rimuovi il dispositivo rimovibile {0}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1624
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1724
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1658
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1758
msgctxt "@info:title"
msgid "Warning"
msgstr "Avvertenza"
@@ -276,17 +251,17 @@ msgctxt "@action"
msgid "Connect via Network"
msgstr "Collega tramite rete"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:57
msgctxt "@action:button Preceded by 'Ready to'."
msgid "Print over network"
msgstr "Stampa sulla rete"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:58
msgctxt "@properties:tooltip"
msgid "Print over network"
msgstr "Stampa sulla rete"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:59
msgctxt "@info:status"
msgid "Connected over the network"
msgstr "Collegato alla rete"
@@ -301,6 +276,21 @@ msgctxt "@info:title"
msgid "Print error"
msgstr "Errore di stampa"
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:21
+msgctxt "@info:title"
+msgid "New cloud printers found"
+msgstr "Nuove stampanti in cloud rilevate"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:22
+msgctxt "@info:message"
+msgid "New printers have been found connected to your account, you can find them in your list of discovered printers."
+msgstr "Sono state trovate nuove stampanti collegate al tuo account. Puoi vederle nell'elenco delle stampanti rilevate."
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:27
+msgctxt "@info:option_text"
+msgid "Do not show this message again"
+msgstr "Non mostrare nuovamente questo messaggio"
+
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
@@ -501,7 +491,7 @@ msgid "GIF Image"
msgstr "Immagine GIF"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
-msgctxt "@item:inlistbox"
+msgctxt "@item:inlistbox 'Open' is part of the name of this file format."
msgid "Open Compressed Triangle Mesh"
msgstr "Open Compressed Triangle Mesh"
@@ -594,12 +584,12 @@ msgctxt "@info:tooltip"
msgid "Configure Per Model Settings"
msgstr "Configura impostazioni per modello"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:186
msgctxt "@title:tab"
msgid "Recommended"
msgstr "Consigliata"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:188
msgctxt "@title:tab"
msgid "Custom"
msgstr "Personalizzata"
@@ -610,19 +600,19 @@ msgctxt "@item:inlistbox"
msgid "3MF File"
msgstr "File 3MF"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:198
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:651
msgctxt "@label"
msgid "Nozzle"
msgstr "Ugello"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:496
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead."
msgstr "Il file di progetto {0} contiene un tipo di macchina sconosciuto {1}. Impossibile importare la macchina. Verranno invece importati i modelli."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:499
msgctxt "@info:title"
msgid "Open Project File"
msgstr "Apri file progetto"
@@ -702,16 +692,6 @@ msgctxt "@item:inlistbox"
msgid "Cura Profile"
msgstr "Profilo Cura"
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12
-msgctxt "@item:inmenu"
-msgid "Profile Assistant"
-msgstr "Assistente profilo"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:18
-msgctxt "@item:inlistbox"
-msgid "Profile Assistant"
-msgstr "Assistente profilo"
-
#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26
msgctxt "@item:inlistbox"
msgid "3MF file"
@@ -732,7 +712,6 @@ msgctxt "@item:inmenu"
msgid "Preview"
msgstr "Anteprima"
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:19
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18
msgctxt "@action"
msgid "Select upgrades"
@@ -748,134 +727,148 @@ msgctxt "@info:title"
msgid "Login failed"
msgstr "Login non riuscito"
-#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:36
msgctxt "@info:not supported profile"
msgid "Not supported"
msgstr "Non supportato"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:55
+msgctxt "@info:No intent profile selected"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:196
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:125
msgctxt "@title:window"
msgid "File Already Exists"
msgstr "Il file esiste già"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:197
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:126
#, python-brace-format
msgctxt "@label Don't translate the XML tag !"
msgid "The file {0} already exists. Are you sure you want to overwrite it?"
msgstr "Il file {0} esiste già. Sei sicuro di volerlo sovrascrivere?"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:427
#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:430
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:433
msgctxt "@info:status"
msgid "Invalid file URL:"
msgstr "File URL non valido:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:780
msgctxt "@info:message Followed by a list of settings."
msgid "Settings have been changed to match the current availability of extruders:"
msgstr "Le impostazioni sono state modificate in base all’attuale disponibilità di estrusori:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:782
msgctxt "@info:title"
msgid "Settings updated"
msgstr "Impostazioni aggiornate"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1334
msgctxt "@info:title"
msgid "Extruder(s) Disabled"
msgstr "Estrusore disabilitato"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1457
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:99
+#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+msgctxt "@label"
+msgid "Unknown"
+msgstr "Sconosciuto"
+
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Failed to export profile to {0}: {1}"
msgstr "Impossibile esportare il profilo su {0}: {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to export profile to {0}: Writer plugin reported failure."
msgstr "Impossibile esportare il profilo su {0}: Rilevata anomalia durante scrittura plugin."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:149
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Exported profile to {0}"
msgstr "Profilo esportato su {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150
msgctxt "@info:title"
msgid "Export succeeded"
msgstr "Esportazione riuscita"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}: {1}"
msgstr "Impossibile importare il profilo da {0}: {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:181
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Can't import profile from {0} before a printer is added."
msgstr "Impossibile importare il profilo da {0} prima di aggiungere una stampante."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:198
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "No custom profile to import in file {0}"
msgstr "Nessun profilo personalizzato da importare nel file {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:202
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}:"
msgstr "Impossibile importare il profilo da {0}:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:226
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:236
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "This profile {0} contains incorrect data, could not import it."
msgstr "Questo profilo {0} contiene dati errati, impossibile importarlo."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:325
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to import profile from {0}:"
msgstr "Impossibile importare il profilo da {0}:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:328
#, python-brace-format
msgctxt "@info:status"
msgid "Successfully imported profile {0}"
msgstr "Profilo importato correttamente {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:331
#, python-brace-format
msgctxt "@info:status"
msgid "File {0} does not contain any valid profile."
msgstr "Il file {0} non contiene nessun profilo valido."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:334
#, python-brace-format
msgctxt "@info:status"
msgid "Profile {0} has an unknown file type or is corrupted."
msgstr "Il profilo {0} ha un tipo di file sconosciuto o corrotto."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369
msgctxt "@label"
msgid "Custom profile"
msgstr "Profilo personalizzato"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:385
msgctxt "@info:status"
msgid "Profile is missing a quality type."
msgstr "Il profilo è privo del tipo di qualità."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:399
#, python-brace-format
msgctxt "@info:status"
msgid "Could not find a quality type {0} for the current configuration."
@@ -941,14 +934,13 @@ msgctxt "@tooltip"
msgid "Other"
msgstr "Altro"
-#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:306
+#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:302
#, python-brace-format
msgctxt "@label"
msgid "Pre-sliced file {0}"
msgstr "File pre-sezionato {0}"
#: /home/ruben/Projects/Cura/cura/UI/WelcomePagesModel.py:56
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:62
msgctxt "@action:button"
msgid "Next"
msgstr "Avanti"
@@ -962,9 +954,9 @@ msgstr "Gruppo #{group_nr}"
#: /home/ruben/Projects/Cura/cura/UI/WhatsNewPagesModel.py:17
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:133
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:169
msgctxt "@action:button"
msgid "Close"
msgstr "Chiudi"
@@ -979,40 +971,87 @@ msgstr "Aggiungi"
#: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:18
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:19
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:81
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:352
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:42
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:58
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:149
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:406
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:294
msgctxt "@action:button"
msgid "Cancel"
msgstr "Annulla"
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:36
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:320
+msgctxt "@label"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:39
+msgctxt "@label"
+msgid "Visual"
+msgstr "Visivo"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:40
+msgctxt "@text"
+msgid "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality."
+msgstr "Il profilo visivo è destinato alla stampa di prototipi e modelli visivi, con l'intento di ottenere una qualità visiva e della superficie elevata."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:43
+msgctxt "@label"
+msgid "Engineering"
+msgstr "Engineering"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:44
+msgctxt "@text"
+msgid "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances."
+msgstr "Il profilo di progettazione è destinato alla stampa di prototipi funzionali e di componenti d'uso finale, allo scopo di ottenere maggiore precisione e"
+" tolleranze strette."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:47
+msgctxt "@label"
+msgid "Draft"
+msgstr "Bozza"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:48
+msgctxt "@text"
+msgid "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction."
+msgstr "Il profilo bozza è destinato alla stampa dei prototipi iniziali e alla convalida dei concept, con l'intento di ridurre in modo significativo il tempo di"
+" stampa."
+
#: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208
msgctxt "@menuitem"
msgid "Not overridden"
msgstr "Non sottoposto a override"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:109
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:357
+msgctxt "@label"
+msgid "Custom profiles"
+msgstr "Profili personalizzati"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:391
#, python-brace-format
msgctxt "@item:inlistbox"
msgid "All Supported Types ({0})"
msgstr "Tutti i tipi supportati ({0})"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:110
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:392
msgctxt "@item:inlistbox"
msgid "All Files (*)"
msgstr "Tutti i file (*)"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:213
msgctxt "@label"
-msgid "Unknown"
-msgstr "Sconosciuto"
+msgid "Custom Material"
+msgstr "Materiale personalizzato"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:214
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:205
+msgctxt "@label"
+msgid "Custom"
+msgstr "Personalizzata"
#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116
msgctxt "@label"
@@ -1024,17 +1063,6 @@ msgctxt "@label"
msgid "Available networked printers"
msgstr "Stampanti disponibili in rete"
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689
-msgctxt "@label"
-msgid "Custom Material"
-msgstr "Materiale personalizzato"
-
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:690
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:203
-msgctxt "@label"
-msgid "Custom"
-msgstr "Personalizzata"
-
#: /home/ruben/Projects/Cura/cura/BuildVolume.py:90
msgctxt "@info:status"
msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models."
@@ -1070,11 +1098,6 @@ msgctxt "@info"
msgid "Unable to reach the Ultimaker account server."
msgstr "Impossibile raggiungere il server account Ultimaker."
-#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202
-msgctxt "@action:button"
-msgid "Retry"
-msgstr "Riprova"
-
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70
msgctxt "@message"
msgid "Please give the required permissions when authorizing this application."
@@ -1259,62 +1282,67 @@ msgctxt "@action:button"
msgid "Send report"
msgstr "Invia report"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:513
msgctxt "@info:progress"
msgid "Loading machines..."
msgstr "Caricamento macchine in corso..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:520
+msgctxt "@info:progress"
+msgid "Setting up preferences..."
+msgstr "Impostazione delle preferenze..."
+
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:824
msgctxt "@info:progress"
msgid "Setting up scene..."
msgstr "Impostazione scena in corso..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:859
msgctxt "@info:progress"
msgid "Loading interface..."
msgstr "Caricamento interfaccia in corso..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1150
#, python-format
msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm."
msgid "%(width).1f x %(depth).1f x %(height).1f mm"
msgstr "%(width).1f x %(depth).1f x %(height).1f mm"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1657
#, python-brace-format
msgctxt "@info:status"
msgid "Only one G-code file can be loaded at a time. Skipped importing {0}"
msgstr "È possibile caricare un solo file codice G per volta. Importazione saltata {0}"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1667
#, python-brace-format
msgctxt "@info:status"
msgid "Can't open any other file if G-code is loading. Skipped importing {0}"
msgstr "Impossibile aprire altri file durante il caricamento del codice G. Importazione saltata {0}"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1757
msgctxt "@info:status"
msgid "The selected model was too small to load."
msgstr "Il modello selezionato è troppo piccolo per il caricamento."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:56
msgctxt "@title:label"
msgid "Printer Settings"
msgstr "Impostazioni della stampante"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70
msgctxt "@label"
msgid "X (Width)"
msgstr "X (Larghezza)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:76
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:90
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:104
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:206
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:225
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:244
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:74
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:88
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:102
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:203
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:223
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:243
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:265
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:285
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:79
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:93
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:109
@@ -1323,57 +1351,57 @@ msgctxt "@label"
msgid "mm"
msgstr "mm"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84
msgctxt "@label"
msgid "Y (Depth)"
msgstr "Y (Profondità)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98
msgctxt "@label"
msgid "Z (Height)"
msgstr "Z (Altezza)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112
msgctxt "@label"
msgid "Build plate shape"
msgstr "Forma del piano di stampa"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125
msgctxt "@label"
msgid "Origin at center"
msgstr "Origine al centro"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137
msgctxt "@label"
msgid "Heated bed"
msgstr "Piano riscaldato"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149
msgctxt "@label"
msgid "Heated build volume"
msgstr "Volume di stampa riscaldato"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:161
msgctxt "@label"
msgid "G-code flavor"
msgstr "Versione codice G"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:185
msgctxt "@title:label"
msgid "Printhead Settings"
msgstr "Impostazioni della testina di stampa"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:199
msgctxt "@label"
msgid "X min"
msgstr "X min"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:219
msgctxt "@label"
msgid "Y min"
msgstr "Y min"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:239
msgctxt "@label"
msgid "X max"
msgstr "X max"
@@ -1383,22 +1411,22 @@ msgctxt "@label"
msgid "Y max"
msgstr "Y max"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:281
msgctxt "@label"
msgid "Gantry Height"
msgstr "Altezza gantry"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:295
msgctxt "@label"
msgid "Number of Extruders"
msgstr "Numero di estrusori"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:355
msgctxt "@title:label"
msgid "Start G-code"
msgstr "Codice G avvio"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:366
msgctxt "@title:label"
msgid "End G-code"
msgstr "Codice G fine"
@@ -1477,7 +1505,7 @@ msgstr "Plugin"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:77
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:44
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:89
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417
msgctxt "@title:tab"
msgid "Materials"
@@ -1672,11 +1700,6 @@ msgctxt "@label:table_header"
msgid "Machine"
msgstr "Macchina"
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131
-msgctxt "@label:table_header"
-msgid "Print Core"
-msgstr "Print Core"
-
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137
msgctxt "@label:table_header"
msgid "Build Plate"
@@ -1932,9 +1955,9 @@ msgid "Edit"
msgstr "Modifica"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:88
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:155
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:138
msgctxt "@action:button"
msgid "Remove"
msgstr "Rimuovi"
@@ -1955,61 +1978,61 @@ msgctxt "@label"
msgid "Type"
msgstr "Tipo"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:225
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274
msgctxt "@label"
msgid "Firmware version"
msgstr "Versione firmware"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:239
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:290
msgctxt "@label"
msgid "Address"
msgstr "Indirizzo"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:263
msgctxt "@label"
msgid "This printer is not set up to host a group of printers."
msgstr "Questa stampante non è predisposta per comandare un gruppo di stampanti."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:267
msgctxt "@label"
msgid "This printer is the host for a group of %1 printers."
msgstr "Questa stampante comanda un gruppo di %1 stampanti."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:278
msgctxt "@label"
msgid "The printer at this address has not yet responded."
msgstr "La stampante a questo indirizzo non ha ancora risposto."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283
msgctxt "@action:button"
msgid "Connect"
msgstr "Collega"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:296
msgctxt "@title:window"
msgid "Invalid IP address"
msgstr "Indirizzo IP non valido"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146
msgctxt "@text"
msgid "Please enter a valid IP address."
msgstr "Inserire un indirizzo IP valido."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:308
msgctxt "@title:window"
msgid "Printer Address"
msgstr "Indirizzo stampante"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:331
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102
msgctxt "@label"
msgid "Enter the IP address of your printer on the network."
msgstr "Inserire l'indirizzo IP della stampante in rete."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181
msgctxt "@action:button"
@@ -2064,17 +2087,17 @@ msgctxt "@label:status"
msgid "Finishes %1 at %2"
msgstr "Finisce %1 a %2"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44
-msgctxt "@action:button"
-msgid "Print"
-msgstr "Stampa"
-
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:11
msgctxt "@title:window"
msgid "Print over network"
msgstr "Stampa sulla rete"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:52
+msgctxt "@action:button"
+msgid "Print"
+msgstr "Stampa"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:80
msgctxt "@label"
msgid "Printer selection"
msgstr "Selezione stampante"
@@ -2425,70 +2448,69 @@ msgctxt "@action:label"
msgid "Smoothing"
msgstr "Smoothing"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37
-msgctxt "@label"
-msgid "Mesh Type"
-msgstr "Tipo di maglia"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68
-msgctxt "@label"
-msgid "Normal model"
-msgstr "Modello normale"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75
-msgctxt "@label"
-msgid "Print as support"
-msgstr "Stampa come supporto"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83
-msgctxt "@label"
-msgid "Don't support overlap with other models"
-msgstr "Non supporta sovrapposizione con altri modelli"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91
-msgctxt "@label"
-msgid "Modify settings for overlap with other models"
-msgstr "Modifica impostazioni per sovrapposizione con altri modelli"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99
-msgctxt "@label"
-msgid "Modify settings for infill of other models"
-msgstr "Modifica impostazioni per riempimento di altri modelli"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:346
-msgctxt "@action:button"
-msgid "Select settings"
-msgstr "Seleziona impostazioni"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:388
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:13
msgctxt "@title:window"
msgid "Select Settings to Customize for this model"
msgstr "Seleziona impostazioni di personalizzazione per questo modello"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:56
#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:94
msgctxt "@label:textbox"
msgid "Filter..."
msgstr "Filtro..."
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:70
msgctxt "@label:checkbox"
msgid "Show all"
msgstr "Mostra tutto"
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:44
+msgctxt "@label"
+msgid "Mesh Type"
+msgstr "Tipo di maglia"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:85
+msgctxt "@label"
+msgid "Normal model"
+msgstr "Modello normale"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:97
+msgctxt "@label"
+msgid "Print as support"
+msgstr "Stampa come supporto"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:109
+msgctxt "@label"
+msgid "Modify settings for overlaps"
+msgstr "Modificare le impostazioni per le sovrapposizioni"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:121
+msgctxt "@label"
+msgid "Don't support overlaps"
+msgstr "Non supportano le sovrapposizioni"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:145
+msgctxt "@action:checkbox"
+msgid "Infill only"
+msgstr "Solo riempimento"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:368
+msgctxt "@action:button"
+msgid "Select settings"
+msgstr "Seleziona impostazioni"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:14
msgctxt "@title:window"
msgid "Open Project"
msgstr "Apri progetto"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:58
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Update/override existing profile"
msgid "Update existing"
msgstr "Aggiorna esistente"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:59
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Save settings in a new profile"
msgid "Create new"
msgstr "Crea nuovo"
@@ -2515,6 +2537,11 @@ msgctxt "@action:ComboBox option"
msgid "Update"
msgstr "Aggiorna"
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
+msgctxt "@action:ComboBox option"
+msgid "Create new"
+msgstr "Crea nuovo"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:106
msgctxt "@action:label"
@@ -2528,7 +2555,7 @@ msgid "Printer Group"
msgstr "Gruppo stampanti"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:220
msgctxt "@action:label"
msgid "Profile settings"
msgstr "Impostazioni profilo"
@@ -2539,75 +2566,81 @@ msgid "How should the conflict in the profile be resolved?"
msgstr "Come può essere risolto il conflitto nel profilo?"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:323
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:244
msgctxt "@action:label"
msgid "Name"
msgstr "Nome"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261
+msgctxt "@action:label"
+msgid "Intent"
+msgstr "Intent"
+
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:246
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228
msgctxt "@action:label"
msgid "Not in profile"
msgstr "Non nel profilo"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:251
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:233
msgctxt "@action:label"
msgid "%1 override"
msgid_plural "%1 overrides"
msgstr[0] "%1 override"
msgstr[1] "%1 override"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:247
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:262
msgctxt "@action:label"
msgid "Derivative from"
msgstr "Derivato da"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:252
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:267
msgctxt "@action:label"
msgid "%1, %2 override"
msgid_plural "%1, %2 overrides"
msgstr[0] "%1, %2 override"
msgstr[1] "%1, %2 override"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:268
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:283
msgctxt "@action:label"
msgid "Material settings"
msgstr "Impostazioni materiale"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:284
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:299
msgctxt "@info:tooltip"
msgid "How should the conflict in the material be resolved?"
msgstr "Come può essere risolto il conflitto nel materiale?"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:342
msgctxt "@action:label"
msgid "Setting visibility"
msgstr "Impostazione visibilità"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:336
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:351
msgctxt "@action:label"
msgid "Mode"
msgstr "Modalità"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:367
msgctxt "@action:label"
msgid "Visible settings:"
msgstr "Impostazioni visibili:"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:372
msgctxt "@action:label"
msgid "%1 out of %2"
msgstr "%1 su %2"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:383
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:398
msgctxt "@action:warning"
msgid "Loading a project will clear all models on the build plate."
msgstr "Il caricamento di un progetto annulla tutti i modelli sul piano di stampa."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:401
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:416
msgctxt "@action:button"
msgid "Open"
msgstr "Apri"
@@ -2714,54 +2747,6 @@ msgctxt "@checkbox:description"
msgid "Automatically create a backup each day that Cura is started."
msgstr "Crea automaticamente un backup ogni giorno in cui viene avviata Cura."
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMainSettingsSelector.qml:75
-msgctxt "@label"
-msgid "Not supported"
-msgstr "Non supportato"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:35
-msgctxt "@action:button"
-msgid "Previous"
-msgstr "Precedente"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:174
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:159
-msgctxt "@action:button"
-msgid "Export"
-msgstr "Esporta"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209
-msgctxt "@label"
-msgid "Tip"
-msgstr "Suggerimento"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMaterialMenu.qml:20
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66
-msgctxt "@label:category menu label"
-msgid "Generic"
-msgstr "Generale"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:160
-msgctxt "@label"
-msgid "Print experiment"
-msgstr "Prova di stampa"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:25
-msgctxt "@label"
-msgid "Checklist"
-msgstr "Lista di controllo"
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:30
-msgctxt "@label"
-msgid "Please select any upgrades made to this Ultimaker 2."
-msgstr "Seleziona qualsiasi aggiornamento realizzato per questa Ultimaker 2."
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:44
-msgctxt "@label"
-msgid "Olsson Block"
-msgstr "Blocco Olsson"
-
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:30
msgctxt "@title"
msgid "Build Plate Leveling"
@@ -2847,170 +2832,176 @@ msgctxt "@label"
msgid "Are you sure you want to abort the print?"
msgstr "Sei sicuro di voler interrompere la stampa?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:72
msgctxt "@title"
msgid "Information"
msgstr "Informazioni"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
msgctxt "@title:window"
msgid "Confirm Diameter Change"
msgstr "Conferma modifica diametro"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:102
msgctxt "@label (%1 is a number)"
msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?"
msgstr "Il nuovo diametro del filamento impostato a %1 mm non è compatibile con l'attuale estrusore. Continuare?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:128
msgctxt "@label"
msgid "Display Name"
msgstr "Visualizza nome"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:138
msgctxt "@label"
msgid "Brand"
msgstr "Marchio"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:148
msgctxt "@label"
msgid "Material Type"
msgstr "Tipo di materiale"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:158
msgctxt "@label"
msgid "Color"
msgstr "Colore"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:208
msgctxt "@label"
msgid "Properties"
msgstr "Proprietà"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:210
msgctxt "@label"
msgid "Density"
msgstr "Densità"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:225
msgctxt "@label"
msgid "Diameter"
msgstr "Diametro"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:259
msgctxt "@label"
msgid "Filament Cost"
msgstr "Costo del filamento"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:276
msgctxt "@label"
msgid "Filament weight"
msgstr "Peso del filamento"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:294
msgctxt "@label"
msgid "Filament length"
msgstr "Lunghezza del filamento"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:303
msgctxt "@label"
msgid "Cost per Meter"
msgstr "Costo al metro"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:317
msgctxt "@label"
msgid "This material is linked to %1 and shares some of its properties."
msgstr "Questo materiale è collegato a %1 e condivide alcune delle sue proprietà."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:324
msgctxt "@label"
msgid "Unlink Material"
msgstr "Scollega materiale"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:335
msgctxt "@label"
msgid "Description"
msgstr "Descrizione"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:348
msgctxt "@label"
msgid "Adhesion Information"
msgstr "Informazioni sull’aderenza"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:374
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19
msgctxt "@label"
msgid "Print settings"
msgstr "Impostazioni di stampa"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:108
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:84
msgctxt "@action:button"
msgid "Activate"
msgstr "Attiva"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:126
msgctxt "@action:button"
msgid "Create"
msgstr "Crea"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:140
msgctxt "@action:button"
msgid "Duplicate"
msgstr "Duplica"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:170
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:167
msgctxt "@action:button"
msgid "Import"
msgstr "Importa"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:184
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:179
+msgctxt "@action:button"
+msgid "Export"
+msgstr "Esporta"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:233
msgctxt "@action:label"
msgid "Printer"
msgstr "Stampante"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:297
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:274
msgctxt "@title:window"
msgid "Confirm Remove"
msgstr "Conferma rimozione"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:275
msgctxt "@label (%1 is object name)"
msgid "Are you sure you wish to remove %1? This cannot be undone!"
msgstr "Sei sicuro di voler rimuovere %1? Questa operazione non può essere annullata!"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:322
msgctxt "@title:window"
msgid "Import Material"
msgstr "Importa materiale"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:323
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Could not import material %1: %2"
msgstr "Impossibile importare materiale {1}: %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:327
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully imported material %1"
msgstr "Materiale importato correttamente %1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
msgctxt "@title:window"
msgid "Export Material"
msgstr "Esporta materiale"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:357
msgctxt "@info:status Don't translate the XML tags and !"
msgid "Failed to export material to %1: %2"
msgstr "Impossibile esportare il materiale su %1: %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:363
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully exported material to %1"
msgstr "Materiale esportato correttamente su %1"
@@ -3025,27 +3016,27 @@ msgctxt "@label:textbox"
msgid "Check all"
msgstr "Controlla tutto"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:48
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
msgctxt "@info:status"
msgid "Calculated"
msgstr "Calcolato"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
msgctxt "@title:column"
msgid "Setting"
msgstr "Impostazione"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:68
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:82
msgctxt "@title:column"
msgid "Profile"
msgstr "Profilo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:89
msgctxt "@title:column"
msgid "Current"
msgstr "Corrente"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:83
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:97
msgctxt "@title:column"
msgid "Unit"
msgstr "Unità"
@@ -3056,307 +3047,301 @@ msgctxt "@title:tab"
msgid "General"
msgstr "Generale"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:132
msgctxt "@label"
msgid "Interface"
msgstr "Interfaccia"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:143
msgctxt "@label"
msgid "Language:"
msgstr "Lingua:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:210
msgctxt "@label"
msgid "Currency:"
msgstr "Valuta:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:223
msgctxt "@label"
msgid "Theme:"
msgstr "Tema:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:279
msgctxt "@label"
msgid "You will need to restart the application for these changes to have effect."
msgstr "Riavviare l'applicazione per rendere effettive le modifiche."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:296
msgctxt "@info:tooltip"
msgid "Slice automatically when changing settings."
msgstr "Seziona automaticamente alla modifica delle impostazioni."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:304
msgctxt "@option:check"
msgid "Slice automatically"
msgstr "Seziona automaticamente"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:318
msgctxt "@label"
msgid "Viewport behavior"
msgstr "Comportamento del riquadro di visualizzazione"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:326
msgctxt "@info:tooltip"
msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly."
msgstr "Evidenzia in rosso le zone non supportate del modello. In assenza di supporto, queste aree non saranno stampate in modo corretto."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:335
msgctxt "@option:check"
msgid "Display overhang"
msgstr "Visualizza sbalzo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:343
msgctxt "@info:tooltip"
msgid "Moves the camera so the model is in the center of the view when a model is selected"
msgstr "Sposta la fotocamera in modo che il modello si trovi al centro della visualizzazione quando è selezionato"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348
msgctxt "@action:button"
msgid "Center camera when item is selected"
msgstr "Centratura fotocamera alla selezione dell'elemento"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:358
msgctxt "@info:tooltip"
msgid "Should the default zoom behavior of cura be inverted?"
msgstr "Il comportamento dello zoom predefinito di Cura dovrebbe essere invertito?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:363
msgctxt "@action:button"
msgid "Invert the direction of camera zoom."
msgstr "Inverti la direzione dello zoom della fotocamera."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Should zooming move in the direction of the mouse?"
msgstr "Lo zoom si muove nella direzione del mouse?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Zooming towards the mouse is not supported in the orthographic perspective."
msgstr "Nella prospettiva ortogonale lo zoom verso la direzione del mouse non è supportato."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384
msgctxt "@action:button"
msgid "Zoom toward mouse direction"
msgstr "Zoom verso la direzione del mouse"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:410
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved so that they no longer intersect?"
msgstr "I modelli sull’area di stampa devono essere spostati per evitare intersezioni?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415
msgctxt "@option:check"
msgid "Ensure models are kept apart"
msgstr "Assicurarsi che i modelli siano mantenuti separati"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:424
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved down to touch the build plate?"
msgstr "I modelli sull’area di stampa devono essere portati a contatto del piano di stampa?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:429
msgctxt "@option:check"
msgid "Automatically drop models to the build plate"
msgstr "Rilascia automaticamente i modelli sul piano di stampa"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441
msgctxt "@info:tooltip"
msgid "Show caution message in g-code reader."
msgstr "Visualizza il messaggio di avvertimento sul lettore codice G."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
msgctxt "@option:check"
msgid "Caution message in g-code reader"
msgstr "Messaggio di avvertimento sul lettore codice G"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:458
msgctxt "@info:tooltip"
msgid "Should layer be forced into compatibility mode?"
msgstr "Lo strato deve essere forzato in modalità di compatibilità?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:463
msgctxt "@option:check"
msgid "Force layer view compatibility mode (restart required)"
msgstr "Forzare la modalità di compatibilità visualizzazione strato (riavvio necessario)"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:473
+msgctxt "@info:tooltip"
+msgid "Should Cura open at the location it was closed?"
+msgstr "Aprire Cura nel punto in cui è stato chiuso?"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:478
+msgctxt "@option:check"
+msgid "Restore window position on start"
+msgstr "Ripristinare la posizione della finestra all'avvio"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:488
msgctxt "@info:tooltip"
msgid "What type of camera rendering should be used?"
msgstr "Quale tipo di rendering della fotocamera è necessario utilizzare?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495
msgctxt "@window:text"
-msgid "Camera rendering: "
-msgstr "Rendering fotocamera: "
+msgid "Camera rendering:"
+msgstr "Rendering fotocamera:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506
msgid "Perspective"
msgstr "Prospettiva"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507
msgid "Orthographic"
msgstr "Ortogonale"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538
msgctxt "@label"
msgid "Opening and saving files"
msgstr "Apertura e salvataggio file"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:545
msgctxt "@info:tooltip"
msgid "Should models be scaled to the build volume if they are too large?"
msgstr "I modelli devono essere ridimensionati al volume di stampa, se troppo grandi?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:550
msgctxt "@option:check"
msgid "Scale large models"
msgstr "Ridimensiona i modelli troppo grandi"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:560
msgctxt "@info:tooltip"
msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?"
msgstr "Un modello può apparire eccessivamente piccolo se la sua unità di misura è espressa in metri anziché in millimetri. Questi modelli devono essere aumentati?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:565
msgctxt "@option:check"
msgid "Scale extremely small models"
msgstr "Ridimensiona i modelli eccessivamente piccoli"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575
msgctxt "@info:tooltip"
msgid "Should models be selected after they are loaded?"
msgstr "I modelli devono essere selezionati dopo essere stati caricati?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:580
msgctxt "@option:check"
msgid "Select models when loaded"
msgstr "Selezionare i modelli dopo il caricamento"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590
msgctxt "@info:tooltip"
msgid "Should a prefix based on the printer name be added to the print job name automatically?"
msgstr "Al nome del processo di stampa deve essere aggiunto automaticamente un prefisso basato sul nome della stampante?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:595
msgctxt "@option:check"
msgid "Add machine prefix to job name"
msgstr "Aggiungi al nome del processo un prefisso macchina"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:605
msgctxt "@info:tooltip"
msgid "Should a summary be shown when saving a project file?"
msgstr "Quando si salva un file di progetto deve essere visualizzato un riepilogo?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609
msgctxt "@option:check"
msgid "Show summary dialog when saving project"
msgstr "Visualizza una finestra di riepilogo quando si salva un progetto"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
msgctxt "@info:tooltip"
msgid "Default behavior when opening a project file"
msgstr "Comportamento predefinito all'apertura di un file progetto"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:627
msgctxt "@window:text"
msgid "Default behavior when opening a project file: "
msgstr "Comportamento predefinito all'apertura di un file progetto: "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641
msgctxt "@option:openProject"
msgid "Always ask me this"
msgstr "Chiedi sempre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:642
msgctxt "@option:openProject"
msgid "Always open as a project"
msgstr "Apri sempre come progetto"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:643
msgctxt "@option:openProject"
msgid "Always import models"
msgstr "Importa sempre i modelli"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:679
msgctxt "@info:tooltip"
msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again."
msgstr "Dopo aver modificato un profilo ed essere passati a un altro, si apre una finestra di dialogo che chiede se mantenere o eliminare le modifiche oppure se scegliere un comportamento predefinito e non visualizzare più tale finestra di dialogo."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:52
msgctxt "@label"
msgid "Profiles"
msgstr "Profili"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:693
msgctxt "@window:text"
msgid "Default behavior for changed setting values when switching to a different profile: "
msgstr "Comportamento predefinito per i valori di impostazione modificati al passaggio a un profilo diverso: "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:707
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157
msgctxt "@option:discardOrKeep"
msgid "Always ask me this"
msgstr "Chiedi sempre"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708
msgctxt "@option:discardOrKeep"
msgid "Always discard changed settings"
msgstr "Elimina sempre le impostazioni modificate"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:709
msgctxt "@option:discardOrKeep"
msgid "Always transfer changed settings to new profile"
msgstr "Trasferisci sempre le impostazioni modificate a un nuovo profilo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743
msgctxt "@label"
msgid "Privacy"
msgstr "Privacy"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:750
msgctxt "@info:tooltip"
msgid "Should Cura check for updates when the program is started?"
msgstr "Cura deve verificare la presenza di eventuali aggiornamenti all’avvio del programma?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:755
msgctxt "@option:check"
msgid "Check for updates on start"
msgstr "Controlla aggiornamenti all’avvio"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:765
msgctxt "@info:tooltip"
msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored."
msgstr "I dati anonimi sulla stampa devono essere inviati a Ultimaker? Nota, non sono trasmessi o memorizzati modelli, indirizzi IP o altre informazioni personali."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:770
msgctxt "@option:check"
msgid "Send (anonymous) print information"
msgstr "Invia informazioni di stampa (anonime)"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:779
msgctxt "@action:button"
msgid "More information"
msgstr "Ulteriori informazioni"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:774
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:27
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ProfileMenu.qml:23
-msgctxt "@label"
-msgid "Experimental"
-msgstr "Sperimentale"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781
-msgctxt "@info:tooltip"
-msgid "Use multi build plate functionality"
-msgstr "Utilizzare la funzionalità piano di stampa multiplo"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786
-msgctxt "@option:check"
-msgid "Use multi build plate functionality (restart required)"
-msgstr "Utilizzare la funzionalità piano di stampa multiplo (necessario riavvio)"
-
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415
msgctxt "@title:tab"
@@ -3364,93 +3349,84 @@ msgid "Printers"
msgstr "Stampanti"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152
msgctxt "@action:button"
msgid "Rename"
msgstr "Rinomina"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:34
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419
msgctxt "@title:tab"
msgid "Profiles"
msgstr "Profili"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:104
msgctxt "@label"
msgid "Create"
msgstr "Crea"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
msgctxt "@label"
msgid "Duplicate"
msgstr "Duplica"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:202
msgctxt "@title:window"
msgid "Create Profile"
msgstr "Crea profilo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:204
msgctxt "@info"
msgid "Please provide a name for this profile."
msgstr "Indica un nome per questo profilo."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:260
msgctxt "@title:window"
msgid "Duplicate Profile"
msgstr "Duplica profilo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:291
msgctxt "@title:window"
msgid "Rename Profile"
msgstr "Rinomina profilo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:304
msgctxt "@title:window"
msgid "Import Profile"
msgstr "Importa profilo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:333
msgctxt "@title:window"
msgid "Export Profile"
msgstr "Esporta profilo"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:396
msgctxt "@label %1 is printer name"
msgid "Printer: %1"
msgstr "Stampante: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Default profiles"
-msgstr "Profili predefiniti"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Custom profiles"
-msgstr "Profili personalizzati"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:554
msgctxt "@action:button"
msgid "Update profile with current settings/overrides"
msgstr "Aggiorna il profilo con le impostazioni/esclusioni correnti"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:561
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:257
msgctxt "@action:button"
msgid "Discard current changes"
msgstr "Elimina le modifiche correnti"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:580
msgctxt "@action:label"
msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below."
msgstr "Questo profilo utilizza le impostazioni predefinite dalla stampante, perciò non ci sono impostazioni/esclusioni nell’elenco riportato di seguito."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:588
msgctxt "@action:label"
msgid "Your current settings match the selected profile."
msgstr "Le impostazioni correnti corrispondono al profilo selezionato."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:606
msgctxt "@title:tab"
msgid "Global Settings"
msgstr "Impostazioni globali"
@@ -3515,35 +3491,35 @@ msgstr "Senza titolo"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:68
msgctxt "@label:textbox"
-msgid "search settings"
-msgstr "impostazioni ricerca"
+msgid "Search settings"
+msgstr "Impostazioni ricerca"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:462
msgctxt "@action:menu"
msgid "Copy value to all extruders"
msgstr "Copia valore su tutti gli estrusori"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:471
msgctxt "@action:menu"
msgid "Copy all changed values to all extruders"
msgstr "Copia tutti i valori modificati su tutti gli estrusori"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:508
msgctxt "@action:menu"
msgid "Hide this setting"
msgstr "Nascondi questa impostazione"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:521
msgctxt "@action:menu"
msgid "Don't show this setting"
msgstr "Nascondi questa impostazione"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
msgctxt "@action:menu"
msgid "Keep this setting visible"
msgstr "Mantieni visibile questa impostazione"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434
msgctxt "@action:menu"
msgid "Configure setting visibility..."
@@ -3575,17 +3551,17 @@ msgctxt "@label Header for list of settings."
msgid "Affected By"
msgstr "Influenzato da"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:187
msgctxt "@label"
msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders."
msgstr "Questa impostazione è sempre condivisa tra tutti gli estrusori. La sua modifica varierà il valore per tutti gli estrusori."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:191
msgctxt "@label"
msgid "The value is resolved from per-extruder values "
msgstr "Questo valore è risolto da valori per estrusore "
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:230
msgctxt "@label"
msgid ""
"This setting has a value that is different from the profile.\n"
@@ -3596,7 +3572,7 @@ msgstr ""
"\n"
"Fare clic per ripristinare il valore del profilo."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:329
msgctxt "@label"
msgid ""
"This setting is normally calculated, but it currently has an absolute value set.\n"
@@ -3607,6 +3583,13 @@ msgstr ""
"\n"
"Fare clic per ripristinare il valore calcolato."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/NoIntentIcon.qml:31
+msgctxt "@label %1 is filled in with the type of a profile. %2 is filled with a list of numbers (eg '1' or '1, 2')"
+msgid "There is no %1 profile for the configuration in extruder %2. The default intent will be used instead"
+msgid_plural "There is no %1 profile for the configurations in extruders %2. The default intent will be used instead"
+msgstr[0] ""
+msgstr[1] ""
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:144
msgctxt "@button"
msgid "Recommended"
@@ -3647,26 +3630,11 @@ msgctxt "@label"
msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards."
msgstr "Abilita stampa di brim o raft. Questa funzione aggiunge un’area piana attorno o sotto l’oggetto, facile da tagliare successivamente."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:175
-msgctxt "@label"
-msgid "Layer Height"
-msgstr "Altezza dello strato"
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:206
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:81
msgctxt "@tooltip"
msgid "You have modified some profile settings. If you want to change these go to custom mode."
msgstr "Sono state modificate alcune impostazioni del profilo. Per modificarle, andare alla modalità personalizzata."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:355
-msgctxt "@tooltip"
-msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
-msgstr "Questo profilo di qualità non è disponibile per la configurazione attuale del materiale e degli ugelli. Modificare tali configurazioni per abilitare il profilo di qualità desiderato."
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449
-msgctxt "@tooltip"
-msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
-msgstr "Un profilo personalizzato è attualmente attivo. Per attivare il cursore qualità, selezionare un profilo di qualità predefinito nella scheda Personalizza"
-
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:13
msgctxt "@label:Should be short"
msgid "On"
@@ -3677,12 +3645,17 @@ msgctxt "@label:Should be short"
msgid "Off"
msgstr "Disinserita"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:27
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:33
+msgctxt "@label"
+msgid "Experimental"
+msgstr "Sperimentale"
+
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:47
msgctxt "@label"
msgid "Profile"
msgstr "Profilo"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:94
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:172
msgctxt "@tooltip"
msgid ""
"Some setting/override values are different from the values stored in the profile.\n"
@@ -3693,6 +3666,11 @@ msgstr ""
"\n"
"Fare clic per aprire la gestione profili."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:160
+msgctxt "@label:header"
+msgid "Custom profiles"
+msgstr "Profili personalizzati"
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:21
msgctxt "@label shown when we load a Gcode file"
msgid "Print setup disabled. G-code file can not be modified."
@@ -3820,11 +3798,16 @@ msgctxt "@label:category menu label"
msgid "Material"
msgstr "Materiale"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:42
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:46
msgctxt "@label:category menu label"
msgid "Favorites"
msgstr "Preferiti"
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:71
+msgctxt "@label:category menu label"
+msgid "Generic"
+msgstr "Generale"
+
#: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25
msgctxt "@label:category menu label"
msgid "Network enabled printers"
@@ -3860,16 +3843,6 @@ msgctxt "@action:inmenu"
msgid "Disable Extruder"
msgstr "Disabilita estrusore"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63
-msgctxt "@title:menu"
-msgid "&Build plate"
-msgstr "&Piano di stampa"
-
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66
-msgctxt "@title:settings"
-msgid "&Profile"
-msgstr "&Profilo"
-
#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:19
msgctxt "@action:inmenu menubar:view"
msgid "&Camera position"
@@ -3949,12 +3922,12 @@ msgctxt "@header"
msgid "Configurations"
msgstr "Configurazioni"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:110
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:112
msgctxt "@label"
msgid "Select configuration"
msgstr "Seleziona configurazione"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:223
msgctxt "@label"
msgid "Configurations"
msgstr "Configurazioni"
@@ -3984,12 +3957,12 @@ msgctxt "@label"
msgid "Enabled"
msgstr "Abilitato"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:251
msgctxt "@label"
msgid "Material"
msgstr "Materiale"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:375
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:378
msgctxt "@label"
msgid "Use glue for better adhesion with this material combination."
msgstr "Utilizzare la colla per una migliore adesione con questa combinazione di materiali."
@@ -4406,44 +4379,44 @@ msgctxt "@title:tab"
msgid "Settings"
msgstr "Impostazioni"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538
msgctxt "@title:window"
msgid "Closing Cura"
msgstr "Chiusura di Cura"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551
msgctxt "@label"
msgid "Are you sure you want to exit Cura?"
msgstr "Sei sicuro di voler uscire da Cura?"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:589
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19
msgctxt "@title:window"
msgid "Open file(s)"
msgstr "Apri file"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:695
msgctxt "@window:title"
msgid "Install Package"
msgstr "Installa il pacchetto"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:703
msgctxt "@title:window"
msgid "Open File(s)"
msgstr "Apri file"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:706
msgctxt "@text:window"
msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one."
msgstr "Rilevata la presenza di uno o più file codice G tra i file selezionati. È possibile aprire solo un file codice G alla volta. Se desideri aprire un file codice G, selezionane uno solo."
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:809
msgctxt "@title:window"
msgid "Add Printer"
msgstr "Aggiungi stampante"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:817
msgctxt "@title:window"
msgid "What's New"
msgstr "Scopri le novità"
@@ -4514,17 +4487,17 @@ msgctxt "@title:window"
msgid "About Cura"
msgstr "Informazioni su Cura"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:56
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:57
msgctxt "@label"
msgid "version: %1"
msgstr "versione: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:72
msgctxt "@label"
msgid "End-to-end solution for fused filament 3D printing."
msgstr "Soluzione end-to-end per la stampa 3D con filamento fuso."
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:84
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:85
msgctxt "@info:credit"
msgid ""
"Cura is developed by Ultimaker B.V. in cooperation with the community.\n"
@@ -4533,122 +4506,122 @@ msgstr ""
"Cura è stato sviluppato da Ultimaker B.V. in cooperazione con la comunità.\n"
"Cura è orgogliosa di utilizzare i seguenti progetti open source:"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
msgctxt "@label"
msgid "Graphical user interface"
msgstr "Interfaccia grafica utente"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
msgctxt "@label"
msgid "Application framework"
msgstr "Struttura applicazione"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
msgctxt "@label"
msgid "G-code generator"
msgstr "Generatore codice G"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:138
msgctxt "@label"
msgid "Interprocess communication library"
msgstr "Libreria di comunicazione intra-processo"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:139
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
msgctxt "@label"
msgid "Programming language"
msgstr "Lingua di programmazione"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
msgctxt "@label"
msgid "GUI framework"
msgstr "Struttura GUI"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
msgctxt "@label"
msgid "GUI framework bindings"
msgstr "Vincoli struttura GUI"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
msgctxt "@label"
msgid "C/C++ Binding library"
msgstr "Libreria vincoli C/C++"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
msgctxt "@label"
msgid "Data interchange format"
msgstr "Formato scambio dati"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
msgctxt "@label"
msgid "Support library for scientific computing"
msgstr "Libreria di supporto per calcolo scientifico"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
msgctxt "@label"
msgid "Support library for faster math"
msgstr "Libreria di supporto per calcolo rapido"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
msgctxt "@label"
msgid "Support library for handling STL files"
msgstr "Libreria di supporto per gestione file STL"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
msgctxt "@label"
msgid "Support library for handling planar objects"
msgstr "Libreria di supporto per gestione oggetti planari"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
msgctxt "@label"
msgid "Support library for handling triangular meshes"
msgstr "Libreria di supporto per gestione maglie triangolari"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
msgctxt "@label"
msgid "Support library for analysis of complex networks"
msgstr "Libreria di supporto per l’analisi di reti complesse"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
msgctxt "@label"
msgid "Support library for handling 3MF files"
msgstr "Libreria di supporto per gestione file 3MF"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
msgctxt "@label"
msgid "Support library for file metadata and streaming"
msgstr "Libreria di supporto per metadati file e streaming"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
msgctxt "@label"
msgid "Serial communication library"
msgstr "Libreria di comunicazione seriale"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
msgctxt "@label"
msgid "ZeroConf discovery library"
msgstr "Libreria scoperta ZeroConf"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
msgctxt "@label"
msgid "Polygon clipping library"
msgstr "Libreria ritaglio poligono"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:156
msgctxt "@Label"
msgid "Python HTTP library"
msgstr "Libreria Python HTTP"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:157
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
msgctxt "@label"
msgid "Font"
msgstr "Font"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
msgctxt "@label"
msgid "SVG icons"
msgstr "Icone SVG"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:160
msgctxt "@label"
msgid "Linux cross-distribution application deployment"
msgstr "Apertura applicazione distribuzione incrociata Linux"
@@ -4668,32 +4641,27 @@ msgctxt "@title:window"
msgid "Save Project"
msgstr "Salva progetto"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149
-msgctxt "@action:label"
-msgid "Build plate"
-msgstr "Piano di stampa"
-
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:177
msgctxt "@action:label"
msgid "Extruder %1"
msgstr "Estrusore %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:192
msgctxt "@action:label"
msgid "%1 & material"
msgstr "%1 & materiale"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:194
msgctxt "@action:label"
msgid "Material"
msgstr "Materiale"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
msgctxt "@action:label"
msgid "Don't show project summary on save again"
msgstr "Non mostrare il riepilogo di progetto alla ripetizione di salva"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:302
msgctxt "@action:button"
msgid "Save"
msgstr "Salva"
@@ -4869,12 +4837,12 @@ msgctxt "@label"
msgid "Troubleshooting"
msgstr "Ricerca e riparazione dei guasti"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:211
msgctxt "@label"
msgid "Printer name"
msgstr "Nome stampante"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:224
msgctxt "@text"
msgid "Please give your printer a name"
msgstr "Assegna un nome alla stampante"
@@ -4933,6 +4901,31 @@ msgctxt "@button"
msgid "Get started"
msgstr "Per iniziare"
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:27
+msgctxt "@info:tooltip"
+msgid "3D View"
+msgstr "Visualizzazione 3D"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:40
+msgctxt "@info:tooltip"
+msgid "Front View"
+msgstr "Visualizzazione frontale"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:53
+msgctxt "@info:tooltip"
+msgid "Top View"
+msgstr "Visualizzazione superiore"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:66
+msgctxt "@info:tooltip"
+msgid "Left View"
+msgstr "Vista sinistra"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:79
+msgctxt "@info:tooltip"
+msgid "Right View"
+msgstr "Vista destra"
+
#: MachineSettingsAction/plugin.json
msgctxt "description"
msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)."
@@ -4993,16 +4986,6 @@ msgctxt "name"
msgid "Model Checker"
msgstr "Controllo modello"
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "description"
-msgid "Dump the contents of all settings to a HTML file."
-msgstr "Scarica contenuto di tutte le impostazioni in un file HTML."
-
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "name"
-msgid "God Mode"
-msgstr "Modalità God"
-
#: FirmwareUpdater/plugin.json
msgctxt "description"
msgid "Provides a machine actions for updating firmware."
@@ -5013,16 +4996,6 @@ msgctxt "name"
msgid "Firmware Updater"
msgstr "Aggiornamento firmware"
-#: ProfileFlattener/plugin.json
-msgctxt "description"
-msgid "Create a flattened quality changes profile."
-msgstr "Crea un profilo appiattito di modifiche di qualità."
-
-#: ProfileFlattener/plugin.json
-msgctxt "name"
-msgid "Profile Flattener"
-msgstr "Appiattitore di profilo"
-
#: AMFReader/plugin.json
msgctxt "description"
msgid "Provides support for reading AMF files."
@@ -5223,6 +5196,16 @@ msgctxt "name"
msgid "Version Upgrade 3.3 to 3.4"
msgstr "Aggiornamento della versione da 3.3 a 3.4"
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "description"
+msgid "Upgrades configurations from Cura 4.3 to Cura 4.4."
+msgstr "Aggiorna le configurazioni da Cura 4.3 a Cura 4.4."
+
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "name"
+msgid "Version Upgrade 4.3 to 4.4"
+msgstr "Aggiornamento della versione da 4.3 a 4.4"
+
#: VersionUpgrade/VersionUpgrade25to26/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 2.5 to Cura 2.6."
@@ -5423,16 +5406,6 @@ msgctxt "name"
msgid "Cura Profile Writer"
msgstr "Writer profilo Cura"
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "description"
-msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
-msgstr "Consente ai produttori di materiali di creare nuovi profili materiale e di qualità utilizzando una UI drop-in."
-
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "name"
-msgid "Print Profile Assistant"
-msgstr "Assistente profilo di stampa"
-
#: 3MFWriter/plugin.json
msgctxt "description"
msgid "Provides support for writing 3MF files."
@@ -5473,6 +5446,158 @@ msgctxt "name"
msgid "Cura Profile Reader"
msgstr "Lettore profilo Cura"
+#~ msgctxt "@item:inmenu"
+#~ msgid "Flatten active settings"
+#~ msgstr "Impostazioni attive profilo appiattito"
+
+#~ msgctxt "@info:status"
+#~ msgid "Profile has been flattened & activated."
+#~ msgstr "Il profilo è stato appiattito e attivato."
+
+#~ msgctxt "X3g Writer Plugin Description"
+#~ msgid "Writes X3g to files"
+#~ msgstr "Scrive X3g sui file"
+
+#~ msgctxt "X3g Writer File Description"
+#~ msgid "X3g File"
+#~ msgstr "File X3g"
+
+#~ msgctxt "X3G Writer File Description"
+#~ msgid "X3G File"
+#~ msgstr "File X3G"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Open Compressed Triangle Mesh"
+#~ msgstr ""
+
+#~ msgctxt "@item:inmenu"
+#~ msgid "Profile Assistant"
+#~ msgstr "Assistente profilo"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Profile Assistant"
+#~ msgstr "Assistente profilo"
+
+#~ msgctxt "@action:button"
+#~ msgid "Retry"
+#~ msgstr "Riprova"
+
+#~ msgctxt "@label:table_header"
+#~ msgid "Print Core"
+#~ msgstr "Print Core"
+
+#~ msgctxt "@label"
+#~ msgid "Don't support overlap with other models"
+#~ msgstr "Non supporta sovrapposizione con altri modelli"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for overlap with other models"
+#~ msgstr "Modifica impostazioni per sovrapposizione con altri modelli"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for infill of other models"
+#~ msgstr "Modifica impostazioni per riempimento di altri modelli"
+
+#~ msgctxt "@action:ComboBox option"
+#~ msgid "Update existing"
+#~ msgstr "Aggiorna esistente"
+
+#~ msgctxt "@label"
+#~ msgid "Not supported"
+#~ msgstr "Non supportato"
+
+#~ msgctxt "@action:button"
+#~ msgid "Previous"
+#~ msgstr "Precedente"
+
+#~ msgctxt "@label"
+#~ msgid "Tip"
+#~ msgstr "Suggerimento"
+
+#~ msgctxt "@label"
+#~ msgid "Print experiment"
+#~ msgstr "Prova di stampa"
+
+#~ msgctxt "@label"
+#~ msgid "Checklist"
+#~ msgstr "Lista di controllo"
+
+#~ msgctxt "@label"
+#~ msgid "Please select any upgrades made to this Ultimaker 2."
+#~ msgstr "Seleziona qualsiasi aggiornamento realizzato per questa Ultimaker 2."
+
+#~ msgctxt "@label"
+#~ msgid "Olsson Block"
+#~ msgstr "Blocco Olsson"
+
+#~ msgctxt "@window:text"
+#~ msgid "Camera rendering: "
+#~ msgstr "Rendering fotocamera: "
+
+#~ msgctxt "@info:tooltip"
+#~ msgid "Use multi build plate functionality"
+#~ msgstr "Utilizzare la funzionalità piano di stampa multiplo"
+
+#~ msgctxt "@option:check"
+#~ msgid "Use multi build plate functionality (restart required)"
+#~ msgstr "Utilizzare la funzionalità piano di stampa multiplo (necessario riavvio)"
+
+#~ msgctxt "@label"
+#~ msgid "Default profiles"
+#~ msgstr "Profili predefiniti"
+
+#~ msgctxt "@label:textbox"
+#~ msgid "search settings"
+#~ msgstr "impostazioni ricerca"
+
+#~ msgctxt "@label"
+#~ msgid "Layer Height"
+#~ msgstr "Altezza dello strato"
+
+#~ msgctxt "@tooltip"
+#~ msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
+#~ msgstr "Questo profilo di qualità non è disponibile per la configurazione attuale del materiale e degli ugelli. Modificare tali configurazioni per abilitare il profilo di qualità desiderato."
+
+#~ msgctxt "@tooltip"
+#~ msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
+#~ msgstr "Un profilo personalizzato è attualmente attivo. Per attivare il cursore qualità, selezionare un profilo di qualità predefinito nella scheda Personalizza"
+
+#~ msgctxt "@title:menu"
+#~ msgid "&Build plate"
+#~ msgstr "&Piano di stampa"
+
+#~ msgctxt "@title:settings"
+#~ msgid "&Profile"
+#~ msgstr "&Profilo"
+
+#~ msgctxt "@action:label"
+#~ msgid "Build plate"
+#~ msgstr "Piano di stampa"
+
+#~ msgctxt "description"
+#~ msgid "Dump the contents of all settings to a HTML file."
+#~ msgstr "Scarica contenuto di tutte le impostazioni in un file HTML."
+
+#~ msgctxt "name"
+#~ msgid "God Mode"
+#~ msgstr "Modalità God"
+
+#~ msgctxt "description"
+#~ msgid "Create a flattened quality changes profile."
+#~ msgstr "Crea un profilo appiattito di modifiche di qualità."
+
+#~ msgctxt "name"
+#~ msgid "Profile Flattener"
+#~ msgstr "Appiattitore di profilo"
+
+#~ msgctxt "description"
+#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
+#~ msgstr "Consente ai produttori di materiali di creare nuovi profili materiale e di qualità utilizzando una UI drop-in."
+
+#~ msgctxt "name"
+#~ msgid "Print Profile Assistant"
+#~ msgstr "Assistente profilo di stampa"
+
#~ msgctxt "@info:status"
#~ msgid "Connected over the network."
#~ msgstr "Collegato alla rete."
diff --git a/resources/i18n/it_IT/fdmextruder.def.json.po b/resources/i18n/it_IT/fdmextruder.def.json.po
index 457ef557f0..4d730ebf7c 100644
--- a/resources/i18n/it_IT/fdmextruder.def.json.po
+++ b/resources/i18n/it_IT/fdmextruder.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-03-13 14:00+0200\n"
"Last-Translator: Bothof \n"
"Language-Team: Italian\n"
diff --git a/resources/i18n/it_IT/fdmprinter.def.json.po b/resources/i18n/it_IT/fdmprinter.def.json.po
index 20e26de47a..2f7a93df43 100644
--- a/resources/i18n/it_IT/fdmprinter.def.json.po
+++ b/resources/i18n/it_IT/fdmprinter.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-07-29 15:51+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: Italian , Italian \n"
@@ -1030,6 +1030,17 @@ msgctxt "bottom_layers description"
msgid "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number."
msgstr "Indica il numero degli strati inferiori. Quando calcolato mediante lo spessore dello strato inferiore, il valore viene arrotondato a numero intero."
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers label"
+msgid "Initial Bottom Layers"
+msgstr "Layer inferiori iniziali"
+
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers description"
+msgid "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number."
+msgstr "Il numero di layer inferiori iniziali, dal piano di stampa verso l'alto. Quando viene calcolato mediante lo spessore inferiore, questo valore viene arrotondato"
+" a un numero intero."
+
#: fdmprinter.def.json
msgctxt "top_bottom_pattern label"
msgid "Top/Bottom Pattern"
@@ -1423,9 +1434,7 @@ msgstr "Abilita stiratura"
#: fdmprinter.def.json
msgctxt "ironing_enabled description"
msgid "Go over the top surface one additional time, but this time extruding very little material. This is meant to melt the plastic on top further, creating a smoother surface. The pressure in the nozzle chamber is kept high so that the creases in the surface are filled with material."
-msgstr "Andare ancora una volta sulla superficie superiore, questa volta estrudendo una piccolissima quantità di materiale. Lo scopo è quello di sciogliere ulteriormente"
-" la plastica sulla parte superiore, creando una superficie più liscia. La pressione nella camera dell'ugello viene mantenuta elevata, in modo che le grinze"
-" nella superficie siano riempite con il materiale."
+msgstr "Andare ancora una volta sulla superficie superiore, questa volta estrudendo una piccolissima quantità di materiale. Lo scopo è quello di sciogliere ulteriormente la plastica sulla parte superiore, creando una superficie più liscia. La pressione nella camera dell'ugello viene mantenuta elevata, in modo che le grinze nella superficie siano riempite con il materiale."
#: fdmprinter.def.json
msgctxt "ironing_only_highest_layer label"
@@ -1710,8 +1719,7 @@ msgstr "Avvio con riempimento casuale"
#: fdmprinter.def.json
msgctxt "infill_randomize_start_location description"
msgid "Randomize which infill line is printed first. This prevents one segment becoming the strongest, but it does so at the cost of an additional travel move."
-msgstr "Decidere in modo casuale quale sarà la linea di riempimento ad essere stampata per prima. In tal modo si evita che un segmento diventi il più resistente"
-" sebbene si esegua uno spostamento aggiuntivo."
+msgstr "Decidere in modo casuale quale sarà la linea di riempimento ad essere stampata per prima. In tal modo si evita che un segmento diventi il più resistente sebbene si esegua uno spostamento aggiuntivo."
#: fdmprinter.def.json
msgctxt "infill_multiplier label"
@@ -3570,9 +3578,7 @@ msgstr "Direzione delle linee di riempimento supporto"
#: fdmprinter.def.json
msgctxt "support_infill_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angle 0 degrees."
-msgstr "Elenco di direzioni linee intere da utilizzare. Gli elementi dall'elenco sono utilizzati in sequenza con il progredire dei layers e, al raggiungimento"
-" della fine dell'elenco, la sequenza ricomincia dall’inizio. Le voci elencate sono separate da virgole e l'intero elenco è racchiuso tra parentesi quadre."
-" L’elenco predefinito è vuoto, vale a dire che utilizza l'angolo predefinito di 0 gradi."
+msgstr "Elenco di direzioni linee intere da utilizzare. Gli elementi dall'elenco sono utilizzati in sequenza con il progredire dei layers e, al raggiungimento della fine dell'elenco, la sequenza ricomincia dall’inizio. Le voci elencate sono separate da virgole e l'intero elenco è racchiuso tra parentesi quadre. L’elenco predefinito è vuoto, vale a dire che utilizza l'angolo predefinito di 0 gradi."
#: fdmprinter.def.json
msgctxt "support_brim_enable label"
@@ -3986,8 +3992,9 @@ msgstr "Area minima interfaccia supporto"
#: fdmprinter.def.json
msgctxt "minimum_interface_area description"
-msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
-msgstr "Dimensioni minime area per i poligoni di interfaccia del supporto. I poligoni con un’area inferiore a questo valore non verranno generati."
+msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Dimensione minima dell'area per i poligoni dell'interfaccia di supporto. I poligoni con un'area più piccola rispetto a questo valore saranno stampati come"
+" supporto normale."
#: fdmprinter.def.json
msgctxt "minimum_roof_area label"
@@ -3996,8 +4003,9 @@ msgstr "Area minima parti superiori supporto"
#: fdmprinter.def.json
msgctxt "minimum_roof_area description"
-msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "Dimensioni minime area per le parti superiori del supporto. I poligoni con un’area inferiore a questo valore non verranno generati."
+msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Dimensione minima dell'area per le parti superiori del supporto. I poligoni con un'area più piccola rispetto a questo valore saranno stampati come supporto"
+" normale."
#: fdmprinter.def.json
msgctxt "minimum_bottom_area label"
@@ -4006,8 +4014,9 @@ msgstr "Area minima parti inferiori supporto"
#: fdmprinter.def.json
msgctxt "minimum_bottom_area description"
-msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "Dimensioni minime area per le parti inferiori del supporto. I poligoni con un’area inferiore a questo valore non verranno generati."
+msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Dimensione minima dell'area per le parti inferiori del supporto. I poligoni con un'area più piccola rispetto a questo valore saranno stampati come supporto"
+" normale."
#: fdmprinter.def.json
msgctxt "support_interface_offset label"
@@ -4047,10 +4056,7 @@ msgstr "Direzioni della linea dell'interfaccia di supporto"
#: fdmprinter.def.json
msgctxt "support_interface_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Elenco di direzioni linee intere da utilizzare. Gli elementi dall'elenco sono utilizzati in sequenza con il progredire dei layers e, al raggiungimento"
-" della fine dell'elenco, la sequenza ricomincia dall’inizio. Le voci elencate sono separate da virgole e l'intero elenco è racchiuso tra parentesi quadre."
-" L'elenco predefinito è vuoto, vale a dire che utilizza gli angoli predefiniti (alterna tra 45 e 135 gradi se le interfacce sono abbastanza spesse oppure"
-" 90 gradi)."
+msgstr "Elenco di direzioni linee intere da utilizzare. Gli elementi dall'elenco sono utilizzati in sequenza con il progredire dei layers e, al raggiungimento della fine dell'elenco, la sequenza ricomincia dall’inizio. Le voci elencate sono separate da virgole e l'intero elenco è racchiuso tra parentesi quadre. L'elenco predefinito è vuoto, vale a dire che utilizza gli angoli predefiniti (alterna tra 45 e 135 gradi se le interfacce sono abbastanza spesse oppure 90 gradi)."
#: fdmprinter.def.json
msgctxt "support_roof_angles label"
@@ -4060,10 +4066,7 @@ msgstr "Direzioni delle linee di supporto superiori"
#: fdmprinter.def.json
msgctxt "support_roof_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Elenco di direzioni linee intere da utilizzare. Gli elementi dall'elenco sono utilizzati in sequenza con il progredire dei layers e, al raggiungimento"
-" della fine dell'elenco, la sequenza ricomincia dall’inizio. Le voci elencate sono separate da virgole e l'intero elenco è racchiuso tra parentesi quadre."
-" L'elenco predefinito è vuoto, vale a dire che utilizza gli angoli predefiniti (alterna tra 45 e 135 gradi se le interfacce sono abbastanza spesse oppure"
-" 90 gradi)."
+msgstr "Elenco di direzioni linee intere da utilizzare. Gli elementi dall'elenco sono utilizzati in sequenza con il progredire dei layers e, al raggiungimento della fine dell'elenco, la sequenza ricomincia dall’inizio. Le voci elencate sono separate da virgole e l'intero elenco è racchiuso tra parentesi quadre. L'elenco predefinito è vuoto, vale a dire che utilizza gli angoli predefiniti (alterna tra 45 e 135 gradi se le interfacce sono abbastanza spesse oppure 90 gradi)."
#: fdmprinter.def.json
msgctxt "support_bottom_angles label"
@@ -4073,10 +4076,7 @@ msgstr "Direzioni della larghezza della linea di supporto inferiore"
#: fdmprinter.def.json
msgctxt "support_bottom_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Elenco di direzioni linee intere da utilizzare. Gli elementi dall'elenco sono utilizzati in sequenza con il progredire dei layers e, al raggiungimento"
-" della fine dell'elenco, la sequenza ricomincia dall’inizio. Le voci elencate sono separate da virgole e l'intero elenco è racchiuso tra parentesi quadre."
-" L'elenco predefinito è vuoto, vale a dire che utilizza gli angoli predefiniti (alterna tra 45 e 135 gradi se le interfacce sono abbastanza spesse oppure"
-" 90 gradi)."
+msgstr "Elenco di direzioni linee intere da utilizzare. Gli elementi dall'elenco sono utilizzati in sequenza con il progredire dei layers e, al raggiungimento della fine dell'elenco, la sequenza ricomincia dall’inizio. Le voci elencate sono separate da virgole e l'intero elenco è racchiuso tra parentesi quadre. L'elenco predefinito è vuoto, vale a dire che utilizza gli angoli predefiniti (alterna tra 45 e 135 gradi se le interfacce sono abbastanza spesse oppure 90 gradi)."
#: fdmprinter.def.json
msgctxt "support_fan_enable label"
@@ -4802,6 +4802,36 @@ msgctxt "remove_empty_first_layers description"
msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle."
msgstr "Rimuovere gli strati vuoti sotto il primo strato stampato, se presenti. La disabilitazione di questa impostazione può provocare la presenza di primi strati vuoti, se l'impostazione di Tolleranza di sezionamento è impostata su Esclusiva o Intermedia."
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution label"
+msgid "Maximum Resolution"
+msgstr "Risoluzione massima"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution description"
+msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
+msgstr "La dimensione minima di un segmento di linea dopo il sezionamento. Se tale dimensione aumenta, la maglia avrà una risoluzione inferiore. Questo può consentire alla stampante di mantenere la velocità per processare il g-code ed aumenterà la velocità di sezionamento eliminando i dettagli della maglia che non è comunque in grado di processare."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution label"
+msgid "Maximum Travel Resolution"
+msgstr "Risoluzione massima di spostamento"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution description"
+msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
+msgstr "La dimensione minima di un segmento lineare di spostamento dopo il sezionamento. Aumentando tale dimensione, le corse di spostamento avranno meno angoli arrotondati. La stampante può così mantenere la velocità per processare il g-code, ma si può verificare una riduzione della precisione di aggiramento del modello."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation label"
+msgid "Maximum Deviation"
+msgstr "Deviazione massima"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation description"
+msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
+msgstr "La deviazione massima consentita quando si riduce la risoluzione per l'impostazione Risoluzione massima. Se si aumenta questo parametro, la stampa sarà meno precisa, ma il g-code sarà più piccolo. Deviazione massima rappresenta il limite per Risoluzione massima; pertanto se le due impostazioni sono in conflitto, verrà considerata vera l'impostazione Deviazione massima."
+
#: fdmprinter.def.json
msgctxt "blackmagic label"
msgid "Special Modes"
@@ -5177,38 +5207,6 @@ msgctxt "minimum_polygon_circumference description"
msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details."
msgstr "I poligoni in strati sezionati con una circonferenza inferiore a questo valore verranno scartati. I valori inferiori generano una maglia con risoluzione superiore al costo del tempo di sezionamento. È dedicata in particolare alle stampanti SLA ad alta risoluzione e a modelli 3D molto piccoli, ricchi di dettagli."
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution label"
-msgid "Maximum Resolution"
-msgstr "Risoluzione massima"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution description"
-msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
-msgstr "La dimensione minima di un segmento di linea dopo il sezionamento. Se tale dimensione aumenta, la maglia avrà una risoluzione inferiore. Questo può consentire alla stampante di mantenere la velocità per processare il g-code ed aumenterà la velocità di sezionamento eliminando i dettagli della maglia che non è comunque in grado di processare."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution label"
-msgid "Maximum Travel Resolution"
-msgstr "Risoluzione massima di spostamento"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution description"
-msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
-msgstr "La dimensione minima di un segmento lineare di spostamento dopo il sezionamento. Aumentando tale dimensione, le corse di spostamento avranno meno angoli arrotondati. La stampante può così mantenere la velocità per processare il g-code, ma si può verificare una riduzione della precisione di aggiramento del modello."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation label"
-msgid "Maximum Deviation"
-msgstr "Deviazione massima"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation description"
-msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
-msgstr "La deviazione massima consentita quando si riduce la risoluzione per l'impostazione Risoluzione massima. Se si aumenta questo parametro, la stampa sarà"
-" meno precisa, ma il g-code sarà più piccolo. Deviazione massima rappresenta il limite per Risoluzione massima; pertanto se le due impostazioni sono in"
-" conflitto, verrà considerata vera l'impostazione Deviazione massima."
-
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
msgid "Break Up Support In Chunks"
@@ -5349,16 +5347,6 @@ msgctxt "coasting_speed description"
msgid "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops."
msgstr "È la velocità a cui eseguire lo spostamento durante il Coasting, rispetto alla velocità del percorso di estrusione. Si consiglia di impostare un valore leggermente al di sotto del 100%, poiché durante il Coasting la pressione nel tubo Bowden scende."
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation label"
-msgid "Alternate Skin Rotation"
-msgstr "Rotazione alternata del rivestimento esterno"
-
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation description"
-msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
-msgstr "Alterna la direzione di stampa degli strati superiori/inferiori. Normalmente vengono stampati solo diagonalmente. Questa impostazione aggiunge le direzioni solo X e solo Y."
-
#: fdmprinter.def.json
msgctxt "cross_infill_pocket_size label"
msgid "Cross 3D Pocket Size"
@@ -5531,23 +5519,24 @@ msgstr "Indica la distanza media tra i punti casuali introdotti su ciascun segme
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset label"
-msgid "Flow rate compensation max extrusion offset"
+msgid "Flow Rate Compensation Max Extrusion Offset"
msgstr "Offset massimo dell'estrusione di compensazione del flusso"
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset description"
-msgid "The maximum distance in mm to compensate."
-msgstr "La massima distanza in mm da compensare."
+msgid "The maximum distance in mm to move the filament to compensate for changes in flow rate."
+msgstr "Distanza massima in mm di spostamento del filamento per compensare le modifiche nella velocità di flusso."
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor label"
-msgid "Flow rate compensation factor"
+msgid "Flow Rate Compensation Factor"
msgstr "Fattore di compensazione del flusso"
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor description"
-msgid "The multiplication factor for the flow rate -> distance translation."
-msgstr "Il fattore di moltiplicazione per il flusso -> traslazione distanza."
+msgid "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."
+msgstr "Distanza di spostamento del filamento al fine di compensare le modifiche nella velocità di flusso, come percentuale della distanza di spostamento del filamento"
+" in un secondo di estrusione."
#: fdmprinter.def.json
msgctxt "wireframe_enabled label"
@@ -5840,13 +5829,14 @@ msgstr "La differenza in altezza dello strato successivo rispetto al precedente.
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold label"
-msgid "Adaptive Layers Threshold"
-msgstr "Soglia strati adattivi"
+msgid "Adaptive Layers Topography Size"
+msgstr "Dimensione della topografia dei layer adattivi"
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold description"
-msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
-msgstr "Soglia per l’utilizzo o meno di uno strato di dimensioni minori. Questo numero è confrontato al valore dell’inclinazione più ripida di uno strato."
+msgid "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."
+msgstr "Distanza orizzontale target tra due layer adiacenti. Riducendo questa impostazione, i layer più sottili verranno utilizzati per avvicinare i margini dei"
+" layer."
#: fdmprinter.def.json
msgctxt "wall_overhang_angle label"
@@ -5855,8 +5845,9 @@ msgstr "Angolo parete di sbalzo"
#: fdmprinter.def.json
msgctxt "wall_overhang_angle description"
-msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
-msgstr "Le pareti che sbalzano oltre questo angolo verranno stampate utilizzando le impostazioni parete di sbalzo. Quando il valore è 90, nessuna parete sarà trattata come sbalzo."
+msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging. Overhang that gets supported by support will not be treated as overhang either."
+msgstr "Le pareti con uno sbalzo superiore a quest'angolo saranno stampate con le impostazioni per le pareti a sbalzo. Se il valore è 90, nessuna parete sarà trattata"
+" come parete a sbalzo. Nemmeno lo sbalzo supportato dal supporto sarà trattato come tale."
#: fdmprinter.def.json
msgctxt "wall_overhang_speed_factor label"
@@ -6235,18 +6226,18 @@ msgstr "Velocità dettagli piccole dimensioni"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor description"
-msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
msgstr "I dettagli di piccole dimensioni verranno stampati a questa percentuale della velocità di stampa normale. Una stampa più lenta può aiutare in termini di"
" adesione e precisione."
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 label"
-msgid "First Layer Speed"
-msgstr "Velocità primo layer"
+msgid "Small Feature Initial Layer Speed"
+msgstr "Velocità layer iniziale per dettagli di piccole dimensioni"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 description"
-msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
msgstr "I dettagli di piccole dimensioni sul primo layer saranno stampati a questa percentuale della velocità di stampa normale. Una stampa più lenta può aiutare"
" in termini di adesione e precisione."
@@ -6310,6 +6301,66 @@ msgctxt "mesh_rotation_matrix description"
msgid "Transformation matrix to be applied to the model when loading it from file."
msgstr "Matrice di rotazione da applicare al modello quando caricato dal file."
+#~ msgctxt "minimum_interface_area description"
+#~ msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Dimensioni minime area per i poligoni di interfaccia del supporto. I poligoni con un’area inferiore a questo valore non verranno generati."
+
+#~ msgctxt "minimum_roof_area description"
+#~ msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Dimensioni minime area per le parti superiori del supporto. I poligoni con un’area inferiore a questo valore non verranno generati."
+
+#~ msgctxt "minimum_bottom_area description"
+#~ msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Dimensioni minime area per le parti inferiori del supporto. I poligoni con un’area inferiore a questo valore non verranno generati."
+
+#~ msgctxt "skin_alternate_rotation label"
+#~ msgid "Alternate Skin Rotation"
+#~ msgstr "Rotazione alternata del rivestimento esterno"
+
+#~ msgctxt "skin_alternate_rotation description"
+#~ msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
+#~ msgstr "Alterna la direzione di stampa degli strati superiori/inferiori. Normalmente vengono stampati solo diagonalmente. Questa impostazione aggiunge le direzioni solo X e solo Y."
+
+#~ msgctxt "flow_rate_max_extrusion_offset label"
+#~ msgid "Flow rate compensation max extrusion offset"
+#~ msgstr "Offset massimo dell'estrusione di compensazione del flusso"
+
+#~ msgctxt "flow_rate_max_extrusion_offset description"
+#~ msgid "The maximum distance in mm to compensate."
+#~ msgstr "La massima distanza in mm da compensare."
+
+#~ msgctxt "flow_rate_extrusion_offset_factor label"
+#~ msgid "Flow rate compensation factor"
+#~ msgstr "Fattore di compensazione del flusso"
+
+#~ msgctxt "flow_rate_extrusion_offset_factor description"
+#~ msgid "The multiplication factor for the flow rate -> distance translation."
+#~ msgstr "Il fattore di moltiplicazione per il flusso -> traslazione distanza."
+
+#~ msgctxt "adaptive_layer_height_threshold label"
+#~ msgid "Adaptive Layers Threshold"
+#~ msgstr "Soglia strati adattivi"
+
+#~ msgctxt "adaptive_layer_height_threshold description"
+#~ msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
+#~ msgstr "Soglia per l’utilizzo o meno di uno strato di dimensioni minori. Questo numero è confrontato al valore dell’inclinazione più ripida di uno strato."
+
+#~ msgctxt "wall_overhang_angle description"
+#~ msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
+#~ msgstr "Le pareti che sbalzano oltre questo angolo verranno stampate utilizzando le impostazioni parete di sbalzo. Quando il valore è 90, nessuna parete sarà trattata come sbalzo."
+
+#~ msgctxt "small_feature_speed_factor description"
+#~ msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "I dettagli di piccole dimensioni verranno stampati a questa percentuale della velocità di stampa normale. Una stampa più lenta può aiutare in termini di adesione e precisione."
+
+#~ msgctxt "small_feature_speed_factor_0 label"
+#~ msgid "First Layer Speed"
+#~ msgstr "Velocità primo layer"
+
+#~ msgctxt "small_feature_speed_factor_0 description"
+#~ msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "I dettagli di piccole dimensioni sul primo layer saranno stampati a questa percentuale della velocità di stampa normale. Una stampa più lenta può aiutare in termini di adesione e precisione."
+
#~ msgctxt "ironing_enabled description"
#~ msgid "Go over the top surface one additional time, but without extruding material. This is meant to melt the plastic on top further, creating a smoother surface."
#~ msgstr "Ulteriore passaggio sopra la superficie superiore, senza estrusione di materiale. Ha lo scopo di fondere ulteriormente la plastica alla sommità, creando una superficie più uniforme."
diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po
index bf018e6bc5..def6a45abf 100644
--- a/resources/i18n/ja_JP/cura.po
+++ b/resources/i18n/ja_JP/cura.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0200\n"
+"POT-Creation-Date: 2019-11-05 13:13+0100\n"
"PO-Revision-Date: 2019-09-23 14:15+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: Japanese , Japanese \n"
@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.2.1\n"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:30
msgctxt "@action"
msgid "Machine Settings"
msgstr "プリンターの設定"
@@ -40,13 +40,13 @@ msgctxt "@item:inlistbox"
msgid "G-code File"
msgstr "G-codeファイル"
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:66
msgctxt "@error:not supported"
msgid "GCodeWriter does not support non-text mode."
msgstr "GCodeWriter は非テキストモードはサポートしていません。"
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:72
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:88
msgctxt "@warning:status"
msgid "Please prepare G-code before exporting."
msgstr "エクスポートする前にG-codeの準備をしてください。"
@@ -56,7 +56,7 @@ msgctxt "@info:title"
msgid "3D Model Assistant"
msgstr "3Dモデルアシスタント"
-#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:90
+#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:92
#, python-brace-format
msgctxt "@info:status"
msgid ""
@@ -75,16 +75,6 @@ msgctxt "@action"
msgid "Update Firmware"
msgstr "ファームウェアアップデート"
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23
-msgctxt "@item:inmenu"
-msgid "Flatten active settings"
-msgstr "アクティブ設定を平らにします"
-
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35
-msgctxt "@info:status"
-msgid "Profile has been flattened & activated."
-msgstr "プロファイルが平らになり、アクティベートされました。"
-
#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "AMF File"
@@ -125,21 +115,6 @@ msgctxt "@message"
msgid "Print in Progress"
msgstr "現在印刷中"
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
-msgctxt "X3g Writer Plugin Description"
-msgid "Writes X3g to files"
-msgstr "X3Gをファイルに書き込む"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21
-msgctxt "X3g Writer File Description"
-msgid "X3g File"
-msgstr "X3Gファイル"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15
-msgctxt "X3G Writer File Description"
-msgid "X3G File"
-msgstr "X3Gファイル"
-
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17
#: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17
msgctxt "@item:inlistbox"
@@ -211,9 +186,9 @@ msgid "Could not save to removable drive {0}: {1}"
msgstr "リムーバブルドライブ{0}に保存することができませんでした: {1}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1634
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:139
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:146
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1668
msgctxt "@info:title"
msgid "Error"
msgstr "エラー"
@@ -243,8 +218,8 @@ msgstr "リムーバブルデバイス{0}を取り出す"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1624
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1724
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1658
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1758
msgctxt "@info:title"
msgid "Warning"
msgstr "警告"
@@ -276,17 +251,17 @@ msgctxt "@action"
msgid "Connect via Network"
msgstr "ネットワーク上にて接続"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:57
msgctxt "@action:button Preceded by 'Ready to'."
msgid "Print over network"
msgstr "ネットワーク上のプリント"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:58
msgctxt "@properties:tooltip"
msgid "Print over network"
msgstr "ネットワークのプリント"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:59
msgctxt "@info:status"
msgid "Connected over the network"
msgstr "ネットワーク上で接続"
@@ -301,6 +276,21 @@ msgctxt "@info:title"
msgid "Print error"
msgstr "印刷エラー"
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:21
+msgctxt "@info:title"
+msgid "New cloud printers found"
+msgstr "新しいクラウドプリンターが見つかりました"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:22
+msgctxt "@info:message"
+msgid "New printers have been found connected to your account, you can find them in your list of discovered printers."
+msgstr "アカウントに接続された新しいプリンターが見つかりました。検出されたプリンターのリストで確認できます。"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:27
+msgctxt "@info:option_text"
+msgid "Do not show this message again"
+msgstr "今後このメッセージを表示しない"
+
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
@@ -501,7 +491,7 @@ msgid "GIF Image"
msgstr "GIF画像"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
-msgctxt "@item:inlistbox"
+msgctxt "@item:inlistbox 'Open' is part of the name of this file format."
msgid "Open Compressed Triangle Mesh"
msgstr "圧縮トライアングルメッシュを開く"
@@ -594,12 +584,12 @@ msgctxt "@info:tooltip"
msgid "Configure Per Model Settings"
msgstr "各モデル構成設定"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:186
msgctxt "@title:tab"
msgid "Recommended"
msgstr "推奨"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:188
msgctxt "@title:tab"
msgid "Custom"
msgstr "カスタム"
@@ -610,19 +600,19 @@ msgctxt "@item:inlistbox"
msgid "3MF File"
msgstr "3MF ファイル"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:198
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:651
msgctxt "@label"
msgid "Nozzle"
msgstr "ノズル"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:496
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead."
msgstr "プロジェクトファイル {0} に不明なマシンタイプ {1} があります。マシンをインポートできません。代わりにモデルをインポートします。"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:499
msgctxt "@info:title"
msgid "Open Project File"
msgstr "プロジェクトファイルを開く"
@@ -702,16 +692,6 @@ msgctxt "@item:inlistbox"
msgid "Cura Profile"
msgstr "Curaプロファイル"
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12
-msgctxt "@item:inmenu"
-msgid "Profile Assistant"
-msgstr "プロファイルアシスタント"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:18
-msgctxt "@item:inlistbox"
-msgid "Profile Assistant"
-msgstr "プロファイルアシスタント"
-
#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26
msgctxt "@item:inlistbox"
msgid "3MF file"
@@ -732,7 +712,6 @@ msgctxt "@item:inmenu"
msgid "Preview"
msgstr "プレビュー"
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:19
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18
msgctxt "@action"
msgid "Select upgrades"
@@ -748,134 +727,148 @@ msgctxt "@info:title"
msgid "Login failed"
msgstr "ログインに失敗しました"
-#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:36
msgctxt "@info:not supported profile"
msgid "Not supported"
msgstr "サポート対象外"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:55
+msgctxt "@info:No intent profile selected"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:196
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:125
msgctxt "@title:window"
msgid "File Already Exists"
msgstr "すでに存在するファイルです"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:197
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:126
#, python-brace-format
msgctxt "@label Don't translate the XML tag !"
msgid "The file {0} already exists. Are you sure you want to overwrite it?"
msgstr "{0} は既に存在します。ファイルを上書きしますか?"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:427
#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:430
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:433
msgctxt "@info:status"
msgid "Invalid file URL:"
msgstr "無効なファイルのURL:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:780
msgctxt "@info:message Followed by a list of settings."
msgid "Settings have been changed to match the current availability of extruders:"
msgstr "現在利用可能な次のエクストルーダーに合わせて設定が変更されました:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:782
msgctxt "@info:title"
msgid "Settings updated"
msgstr "設定が更新されました"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1334
msgctxt "@info:title"
msgid "Extruder(s) Disabled"
msgstr "エクストルーダーを無効にしました"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1457
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:99
+#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+msgctxt "@label"
+msgid "Unknown"
+msgstr "不明"
+
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Failed to export profile to {0}: {1}"
msgstr "{0}にプロファイルを書き出すのに失敗しました: {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to export profile to {0}: Writer plugin reported failure."
msgstr "{0}にプロファイルを書き出すことに失敗しました。:ライタープラグイン失敗の報告。"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:149
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Exported profile to {0}"
msgstr "{0}にプロファイルを書き出しました"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150
msgctxt "@info:title"
msgid "Export succeeded"
msgstr "書き出し完了"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}: {1}"
msgstr "{0}からプロファイルの取り込に失敗しました:{1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:181
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Can't import profile from {0} before a printer is added."
msgstr "プリンタを追加する前に、{0}からプロファイルの取り込はできません。"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:198
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "No custom profile to import in file {0}"
msgstr "ファイル{0}にはカスタムプロファイルがインポートされていません"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:202
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}:"
msgstr "{0}からプロファイルの取り込に失敗しました:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:226
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:236
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "This profile {0} contains incorrect data, could not import it."
msgstr "このプロファイル{0}には、正しくないデータが含まれているため、インポートできません。"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:325
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to import profile from {0}:"
msgstr "{0}からプロファイルの取り込みに失敗しました:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:328
#, python-brace-format
msgctxt "@info:status"
msgid "Successfully imported profile {0}"
msgstr "プロファイル {0}の取り込み完了"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:331
#, python-brace-format
msgctxt "@info:status"
msgid "File {0} does not contain any valid profile."
msgstr "ファイル{0}には、正しいプロファイルが含まれていません。"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:334
#, python-brace-format
msgctxt "@info:status"
msgid "Profile {0} has an unknown file type or is corrupted."
msgstr "プロファイル{0}は不特定なファイルまたは破損があります。"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369
msgctxt "@label"
msgid "Custom profile"
msgstr "カスタムプロファイル"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:385
msgctxt "@info:status"
msgid "Profile is missing a quality type."
msgstr "プロファイルはクオリティータイプが不足しています。"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:399
#, python-brace-format
msgctxt "@info:status"
msgid "Could not find a quality type {0} for the current configuration."
@@ -941,14 +934,13 @@ msgctxt "@tooltip"
msgid "Other"
msgstr "他"
-#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:306
+#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:302
#, python-brace-format
msgctxt "@label"
msgid "Pre-sliced file {0}"
msgstr "スライス前ファイル {0}"
#: /home/ruben/Projects/Cura/cura/UI/WelcomePagesModel.py:56
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:62
msgctxt "@action:button"
msgid "Next"
msgstr "次"
@@ -962,9 +954,9 @@ msgstr "グループ #{group_nr}"
#: /home/ruben/Projects/Cura/cura/UI/WhatsNewPagesModel.py:17
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:133
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:169
msgctxt "@action:button"
msgid "Close"
msgstr "閉める"
@@ -979,40 +971,85 @@ msgstr "追加"
#: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:18
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:19
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:81
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:352
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:42
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:58
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:149
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:406
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:294
msgctxt "@action:button"
msgid "Cancel"
msgstr "キャンセル"
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:36
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:320
+msgctxt "@label"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:39
+msgctxt "@label"
+msgid "Visual"
+msgstr "ビジュアル"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:40
+msgctxt "@text"
+msgid "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality."
+msgstr "ビジュアルプロファイルは、優れたビジュアルと表面品質を目的としたビジュアルプロトタイプやモデルをプリントするために設計されています。"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:43
+msgctxt "@label"
+msgid "Engineering"
+msgstr "Engineering"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:44
+msgctxt "@text"
+msgid "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances."
+msgstr "エンジニアリングプロファイルは、精度向上と公差の厳格対応を目的とした機能プロトタイプや最終用途部品をプリントするために設計されています。"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:47
+msgctxt "@label"
+msgid "Draft"
+msgstr "ドラフト"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:48
+msgctxt "@text"
+msgid "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction."
+msgstr "ドラフトプロファイルは、プリント時間の大幅短縮を目的とした初期プロトタイプとコンセプト検証をプリントするために設計されています。"
+
#: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208
msgctxt "@menuitem"
msgid "Not overridden"
msgstr "上書きできません"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:109
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:357
+msgctxt "@label"
+msgid "Custom profiles"
+msgstr "カスタムプロファイル"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:391
#, python-brace-format
msgctxt "@item:inlistbox"
msgid "All Supported Types ({0})"
msgstr "すべてのサポートのタイプ ({0})"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:110
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:392
msgctxt "@item:inlistbox"
msgid "All Files (*)"
msgstr "全てのファイル"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:213
msgctxt "@label"
-msgid "Unknown"
-msgstr "不明"
+msgid "Custom Material"
+msgstr "カスタムフィラメント"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:214
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:205
+msgctxt "@label"
+msgid "Custom"
+msgstr "カスタム"
#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116
msgctxt "@label"
@@ -1024,17 +1061,6 @@ msgctxt "@label"
msgid "Available networked printers"
msgstr "ネットワークで利用可能なプリンター"
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689
-msgctxt "@label"
-msgid "Custom Material"
-msgstr "カスタムフィラメント"
-
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:690
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:203
-msgctxt "@label"
-msgid "Custom"
-msgstr "カスタム"
-
#: /home/ruben/Projects/Cura/cura/BuildVolume.py:90
msgctxt "@info:status"
msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models."
@@ -1070,11 +1096,6 @@ msgctxt "@info"
msgid "Unable to reach the Ultimaker account server."
msgstr "Ultimaker アカウントサーバーに到達できません。"
-#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202
-msgctxt "@action:button"
-msgid "Retry"
-msgstr "再試行"
-
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70
msgctxt "@message"
msgid "Please give the required permissions when authorizing this application."
@@ -1259,62 +1280,67 @@ msgctxt "@action:button"
msgid "Send report"
msgstr "レポート送信"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:513
msgctxt "@info:progress"
msgid "Loading machines..."
msgstr "プリンターを読み込み中…"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:520
+msgctxt "@info:progress"
+msgid "Setting up preferences..."
+msgstr "プレファレンスをセットアップ中..."
+
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:824
msgctxt "@info:progress"
msgid "Setting up scene..."
msgstr "シーンをセットアップ中…"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:859
msgctxt "@info:progress"
msgid "Loading interface..."
msgstr "インターフェイスを読み込み中…"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1150
#, python-format
msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm."
msgid "%(width).1f x %(depth).1f x %(height).1f mm"
msgstr "%(width).1f x %(depth).1f x %(height).1f mm"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1657
#, python-brace-format
msgctxt "@info:status"
msgid "Only one G-code file can be loaded at a time. Skipped importing {0}"
msgstr "一度に一つのG-codeしか読み取れません。{0}の取り込みをスキップしました。"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1667
#, python-brace-format
msgctxt "@info:status"
msgid "Can't open any other file if G-code is loading. Skipped importing {0}"
msgstr "G-codeを読み込み中は他のファイルを開くことができません。{0}の取り込みをスキップしました。"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1757
msgctxt "@info:status"
msgid "The selected model was too small to load."
msgstr "選択したモデルは読み込むのに小さすぎます。"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:56
msgctxt "@title:label"
msgid "Printer Settings"
msgstr "プリンターの設定"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70
msgctxt "@label"
msgid "X (Width)"
msgstr "X(幅)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:76
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:90
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:104
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:206
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:225
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:244
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:74
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:88
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:102
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:203
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:223
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:243
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:265
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:285
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:79
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:93
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:109
@@ -1323,57 +1349,57 @@ msgctxt "@label"
msgid "mm"
msgstr "mm"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84
msgctxt "@label"
msgid "Y (Depth)"
msgstr "Y (奥行き)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98
msgctxt "@label"
msgid "Z (Height)"
msgstr "Z (高さ)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112
msgctxt "@label"
msgid "Build plate shape"
msgstr "ビルドプレート形"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125
msgctxt "@label"
msgid "Origin at center"
msgstr "センターを出します"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137
msgctxt "@label"
msgid "Heated bed"
msgstr "ヒーテッドドベッド"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149
msgctxt "@label"
msgid "Heated build volume"
msgstr "加熱式ビルドボリューム"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:161
msgctxt "@label"
msgid "G-code flavor"
msgstr "G-codeフレーバー"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:185
msgctxt "@title:label"
msgid "Printhead Settings"
msgstr "プリントヘッド設定"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:199
msgctxt "@label"
msgid "X min"
msgstr "X分"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:219
msgctxt "@label"
msgid "Y min"
msgstr "Y分"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:239
msgctxt "@label"
msgid "X max"
msgstr "最大X"
@@ -1383,22 +1409,22 @@ msgctxt "@label"
msgid "Y max"
msgstr "最大Y"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:281
msgctxt "@label"
msgid "Gantry Height"
msgstr "ガントリーの高さ"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:295
msgctxt "@label"
msgid "Number of Extruders"
msgstr "エクストルーダーの数"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:355
msgctxt "@title:label"
msgid "Start G-code"
msgstr "G-Codeの開始"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:366
msgctxt "@title:label"
msgid "End G-code"
msgstr "G-codeの終了"
@@ -1477,7 +1503,7 @@ msgstr "プラグイン"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:77
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:44
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:89
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417
msgctxt "@title:tab"
msgid "Materials"
@@ -1672,11 +1698,6 @@ msgctxt "@label:table_header"
msgid "Machine"
msgstr "プリンター"
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131
-msgctxt "@label:table_header"
-msgid "Print Core"
-msgstr "プリントコア"
-
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137
msgctxt "@label:table_header"
msgid "Build Plate"
@@ -1932,9 +1953,9 @@ msgid "Edit"
msgstr "編集"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:88
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:155
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:138
msgctxt "@action:button"
msgid "Remove"
msgstr "取り除く"
@@ -1955,61 +1976,61 @@ msgctxt "@label"
msgid "Type"
msgstr "タイプ"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:225
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274
msgctxt "@label"
msgid "Firmware version"
msgstr "ファームウェアバージョン"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:239
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:290
msgctxt "@label"
msgid "Address"
msgstr "アドレス"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:263
msgctxt "@label"
msgid "This printer is not set up to host a group of printers."
msgstr "このプリンターは、プリンターのグループをホストするために設定されていません。"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:267
msgctxt "@label"
msgid "This printer is the host for a group of %1 printers."
msgstr "このプリンターは %1 プリンターのループのホストプリンターです。"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:278
msgctxt "@label"
msgid "The printer at this address has not yet responded."
msgstr "このアドレスのプリンターは応答していません。"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283
msgctxt "@action:button"
msgid "Connect"
msgstr "接続"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:296
msgctxt "@title:window"
msgid "Invalid IP address"
msgstr "無効なIPアドレス"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146
msgctxt "@text"
msgid "Please enter a valid IP address."
msgstr "有効なIPアドレスを入力してください。"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:308
msgctxt "@title:window"
msgid "Printer Address"
msgstr "プリンターアドレス"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:331
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102
msgctxt "@label"
msgid "Enter the IP address of your printer on the network."
msgstr "ネットワーク内のプリンターのIPアドレスを入力してください。"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181
msgctxt "@action:button"
@@ -2064,17 +2085,17 @@ msgctxt "@label:status"
msgid "Finishes %1 at %2"
msgstr "%1 を %2 に終了します"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44
-msgctxt "@action:button"
-msgid "Print"
-msgstr "プリント"
-
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:11
msgctxt "@title:window"
msgid "Print over network"
msgstr "ネットワーク上のプリント"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:52
+msgctxt "@action:button"
+msgid "Print"
+msgstr "プリント"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:80
msgctxt "@label"
msgid "Printer selection"
msgstr "プリンターの選択"
@@ -2423,70 +2444,69 @@ msgctxt "@action:label"
msgid "Smoothing"
msgstr "スムージング"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37
-msgctxt "@label"
-msgid "Mesh Type"
-msgstr "メッシュタイプ"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68
-msgctxt "@label"
-msgid "Normal model"
-msgstr "標準モデル"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75
-msgctxt "@label"
-msgid "Print as support"
-msgstr "サポートとしてプリント"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83
-msgctxt "@label"
-msgid "Don't support overlap with other models"
-msgstr "他のモデルとのオーバーラップは未サポート"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91
-msgctxt "@label"
-msgid "Modify settings for overlap with other models"
-msgstr "他のモデルとのオーバーラップの設定を変更"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99
-msgctxt "@label"
-msgid "Modify settings for infill of other models"
-msgstr "他のモデルのインフィルの設定を変更"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:346
-msgctxt "@action:button"
-msgid "Select settings"
-msgstr "設定を選択する"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:388
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:13
msgctxt "@title:window"
msgid "Select Settings to Customize for this model"
msgstr "このモデルをカスタマイズする設定を選択する"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:56
#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:94
msgctxt "@label:textbox"
msgid "Filter..."
msgstr "フィルター…"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:70
msgctxt "@label:checkbox"
msgid "Show all"
msgstr "すべて表示する"
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:44
+msgctxt "@label"
+msgid "Mesh Type"
+msgstr "メッシュタイプ"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:85
+msgctxt "@label"
+msgid "Normal model"
+msgstr "標準モデル"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:97
+msgctxt "@label"
+msgid "Print as support"
+msgstr "サポートとしてプリント"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:109
+msgctxt "@label"
+msgid "Modify settings for overlaps"
+msgstr "オーバーラップの設定を変更"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:121
+msgctxt "@label"
+msgid "Don't support overlaps"
+msgstr "オーバーラップをサポートしない"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:145
+msgctxt "@action:checkbox"
+msgid "Infill only"
+msgstr "インフィルのみ"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:368
+msgctxt "@action:button"
+msgid "Select settings"
+msgstr "設定を選択する"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:14
msgctxt "@title:window"
msgid "Open Project"
msgstr "プロジェクトを開く"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:58
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Update/override existing profile"
msgid "Update existing"
-msgstr "現在のプロファイルに読み込む"
+msgstr "既存を更新する"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:59
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Save settings in a new profile"
msgid "Create new"
msgstr "新しいものを作成する"
@@ -2513,6 +2533,11 @@ msgctxt "@action:ComboBox option"
msgid "Update"
msgstr "アップデート"
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
+msgctxt "@action:ComboBox option"
+msgid "Create new"
+msgstr "新しいものを作成する"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:106
msgctxt "@action:label"
@@ -2526,7 +2551,7 @@ msgid "Printer Group"
msgstr "プリンターグループ"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:220
msgctxt "@action:label"
msgid "Profile settings"
msgstr "プロファイル設定"
@@ -2537,28 +2562,34 @@ msgid "How should the conflict in the profile be resolved?"
msgstr "このプロファイルの問題をどのように解決すればいいか?"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:323
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:244
msgctxt "@action:label"
msgid "Name"
msgstr "ネーム"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261
+msgctxt "@action:label"
+msgid "Intent"
+msgstr "Intent"
+
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:246
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228
msgctxt "@action:label"
msgid "Not in profile"
msgstr "プロファイル内にない"
# Can’t edit the Japanese text
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:251
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:233
msgctxt "@action:label"
msgid "%1 override"
msgid_plural "%1 overrides"
msgstr[0] "%1個の設定を上書き"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:247
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:262
msgctxt "@action:label"
msgid "Derivative from"
msgstr "次から引き出す"
@@ -2566,48 +2597,48 @@ msgstr "次から引き出す"
# can’t inset the japanese text
# %1: print quality profile name
# %2: number of overridden ssettings
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:252
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:267
msgctxt "@action:label"
msgid "%1, %2 override"
msgid_plural "%1, %2 overrides"
msgstr[0] "%2の%1個の設定を上書き"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:268
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:283
msgctxt "@action:label"
msgid "Material settings"
msgstr "フィラメント設定"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:284
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:299
msgctxt "@info:tooltip"
msgid "How should the conflict in the material be resolved?"
msgstr "このフィラメントの問題をどのように解決すればいいか?"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:342
msgctxt "@action:label"
msgid "Setting visibility"
msgstr "視野設定"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:336
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:351
msgctxt "@action:label"
msgid "Mode"
msgstr "モード"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:367
msgctxt "@action:label"
msgid "Visible settings:"
msgstr "ビジブル設定:"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:372
msgctxt "@action:label"
msgid "%1 out of %2"
msgstr "%2のうち%1"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:383
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:398
msgctxt "@action:warning"
msgid "Loading a project will clear all models on the build plate."
msgstr "プロジェクトを読み込むとビルドプレート上のすべてのモデルがクリアされます。"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:401
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:416
msgctxt "@action:button"
msgid "Open"
msgstr "開く"
@@ -2714,54 +2745,6 @@ msgctxt "@checkbox:description"
msgid "Automatically create a backup each day that Cura is started."
msgstr "Cura を起動した日は常にバックアップを自動生成します。"
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMainSettingsSelector.qml:75
-msgctxt "@label"
-msgid "Not supported"
-msgstr "サポート対象外"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:35
-msgctxt "@action:button"
-msgid "Previous"
-msgstr "前"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:174
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:159
-msgctxt "@action:button"
-msgid "Export"
-msgstr "書き出す"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209
-msgctxt "@label"
-msgid "Tip"
-msgstr "ヒント"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMaterialMenu.qml:20
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66
-msgctxt "@label:category menu label"
-msgid "Generic"
-msgstr "汎用"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:160
-msgctxt "@label"
-msgid "Print experiment"
-msgstr "試し印刷"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:25
-msgctxt "@label"
-msgid "Checklist"
-msgstr "チェックリスト"
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:30
-msgctxt "@label"
-msgid "Please select any upgrades made to this Ultimaker 2."
-msgstr "このUltimaker2に施したアップグレードを選択してください。"
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:44
-msgctxt "@label"
-msgid "Olsson Block"
-msgstr "Olsson Block"
-
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:30
msgctxt "@title"
msgid "Build Plate Leveling"
@@ -2847,170 +2830,176 @@ msgctxt "@label"
msgid "Are you sure you want to abort the print?"
msgstr "本当にプリントを中止してもいいですか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:72
msgctxt "@title"
msgid "Information"
msgstr "インフォメーション"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
msgctxt "@title:window"
msgid "Confirm Diameter Change"
msgstr "直径変更の確認"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:102
msgctxt "@label (%1 is a number)"
msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?"
msgstr "新しいフィラメントの直径は %1 mm に設定されています。これは現在のエクストルーダーに適応していません。続行しますか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:128
msgctxt "@label"
msgid "Display Name"
msgstr "ディスプレイ名"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:138
msgctxt "@label"
msgid "Brand"
msgstr "ブランド"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:148
msgctxt "@label"
msgid "Material Type"
msgstr "フィラメントタイプ"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:158
msgctxt "@label"
msgid "Color"
msgstr "色"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:208
msgctxt "@label"
msgid "Properties"
msgstr "プロパティ"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:210
msgctxt "@label"
msgid "Density"
msgstr "密度"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:225
msgctxt "@label"
msgid "Diameter"
msgstr "直径"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:259
msgctxt "@label"
msgid "Filament Cost"
msgstr "フィラメントコスト"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:276
msgctxt "@label"
msgid "Filament weight"
msgstr "フィラメントの重さ"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:294
msgctxt "@label"
msgid "Filament length"
msgstr "フィラメントの長さ"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:303
msgctxt "@label"
msgid "Cost per Meter"
msgstr "毎メーターコスト"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:317
msgctxt "@label"
msgid "This material is linked to %1 and shares some of its properties."
msgstr "このフィラメントは %1にリンクすプロパティーを共有する。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:324
msgctxt "@label"
msgid "Unlink Material"
msgstr "フィラメントをリンクを外す"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:335
msgctxt "@label"
msgid "Description"
msgstr "記述"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:348
msgctxt "@label"
msgid "Adhesion Information"
msgstr "接着のインフォメーション"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:374
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19
msgctxt "@label"
msgid "Print settings"
msgstr "プリント設定"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:108
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:84
msgctxt "@action:button"
msgid "Activate"
msgstr "アクティベート"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:126
msgctxt "@action:button"
msgid "Create"
msgstr "作成する"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:140
msgctxt "@action:button"
msgid "Duplicate"
msgstr "複製"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:170
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:167
msgctxt "@action:button"
msgid "Import"
msgstr "取り込む"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:184
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:179
+msgctxt "@action:button"
+msgid "Export"
+msgstr "書き出す"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:233
msgctxt "@action:label"
msgid "Printer"
msgstr "プリンター"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:297
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:274
msgctxt "@title:window"
msgid "Confirm Remove"
msgstr "モデルを取り除きました"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:275
msgctxt "@label (%1 is object name)"
msgid "Are you sure you wish to remove %1? This cannot be undone!"
msgstr "%1を取り外しますか?この作業はやり直しが効きません!"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:322
msgctxt "@title:window"
msgid "Import Material"
msgstr "フィラメントを取り込む"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:323
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Could not import material %1: %2"
msgstr "%1フィラメントを取り込むことができない: %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:327
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully imported material %1"
msgstr "フィラメント%1の取り込みに成功しました"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
msgctxt "@title:window"
msgid "Export Material"
msgstr "フィラメントを書き出す"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:357
msgctxt "@info:status Don't translate the XML tags and !"
msgid "Failed to export material to %1: %2"
msgstr "フィラメントの書き出しに失敗しました %1: %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:363
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully exported material to %1"
msgstr "フィラメントの%1への書き出しが完了ました"
@@ -3025,27 +3014,27 @@ msgctxt "@label:textbox"
msgid "Check all"
msgstr "全てを調べる"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:48
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
msgctxt "@info:status"
msgid "Calculated"
msgstr "計算された"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
msgctxt "@title:column"
msgid "Setting"
msgstr "設定"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:68
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:82
msgctxt "@title:column"
msgid "Profile"
msgstr "プロファイル"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:89
msgctxt "@title:column"
msgid "Current"
msgstr "現在"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:83
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:97
msgctxt "@title:column"
msgid "Unit"
msgstr "ユニット"
@@ -3056,307 +3045,301 @@ msgctxt "@title:tab"
msgid "General"
msgstr "一般"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:132
msgctxt "@label"
msgid "Interface"
msgstr "インターフェイス"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:143
msgctxt "@label"
msgid "Language:"
msgstr "言語:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:210
msgctxt "@label"
msgid "Currency:"
msgstr "通貨:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:223
msgctxt "@label"
msgid "Theme:"
msgstr "テーマ:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:279
msgctxt "@label"
msgid "You will need to restart the application for these changes to have effect."
msgstr "それらの変更を有効にするためにはアプリケーションを再起動しなけらばなりません。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:296
msgctxt "@info:tooltip"
msgid "Slice automatically when changing settings."
msgstr "セッティングを変更すると自動にスライスします。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:304
msgctxt "@option:check"
msgid "Slice automatically"
msgstr "自動的にスライスする"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:318
msgctxt "@label"
msgid "Viewport behavior"
msgstr "ビューポイント機能"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:326
msgctxt "@info:tooltip"
msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly."
msgstr "赤でサポートができないエリアをハイライトしてください。サポートがない場合、正確にプリントができない場合があります。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:335
msgctxt "@option:check"
msgid "Display overhang"
msgstr "ディスプレイオーバーハング"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:343
msgctxt "@info:tooltip"
msgid "Moves the camera so the model is in the center of the view when a model is selected"
msgstr "モデルの選択時にモデルがカメラの中心に見えるようにカメラを移動する"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348
msgctxt "@action:button"
msgid "Center camera when item is selected"
msgstr "アイテムを選択するとカメラが中心にきます"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:358
msgctxt "@info:tooltip"
msgid "Should the default zoom behavior of cura be inverted?"
msgstr "Curaのデフォルトのズーム機能は変更できるべきか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:363
msgctxt "@action:button"
msgid "Invert the direction of camera zoom."
msgstr "カメラのズーム方向を反転する。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Should zooming move in the direction of the mouse?"
msgstr "ズームはマウスの方向に動くべきか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Zooming towards the mouse is not supported in the orthographic perspective."
msgstr "マウスに対するズームは、正射投影ではサポートされていません。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384
msgctxt "@action:button"
msgid "Zoom toward mouse direction"
msgstr "マウスの方向にズームする"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:410
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved so that they no longer intersect?"
msgstr "交差を避けるためにプラットホーム上のモデルを移動するべきですか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415
msgctxt "@option:check"
msgid "Ensure models are kept apart"
msgstr "モデルの距離が離れているように確認する"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:424
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved down to touch the build plate?"
msgstr "プラットホーム上のモデルはブルドプレートに触れるように下げるべきか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:429
msgctxt "@option:check"
msgid "Automatically drop models to the build plate"
msgstr "自動的にモデルをビルドプレートに落とす"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441
msgctxt "@info:tooltip"
msgid "Show caution message in g-code reader."
msgstr "G-codeリーダーに注意メッセージを表示します。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
msgctxt "@option:check"
msgid "Caution message in g-code reader"
msgstr "G-codeリーダーに注意メッセージ"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:458
msgctxt "@info:tooltip"
msgid "Should layer be forced into compatibility mode?"
msgstr "レイヤーはコンパティビリティモードに強制されるべきか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:463
msgctxt "@option:check"
msgid "Force layer view compatibility mode (restart required)"
msgstr "レイヤービューコンパティビリティモードを強制する。(再起動が必要)"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:473
+msgctxt "@info:tooltip"
+msgid "Should Cura open at the location it was closed?"
+msgstr "Curaを終了した場所で開くようにしますか?"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:478
+msgctxt "@option:check"
+msgid "Restore window position on start"
+msgstr "開始時にウィンドウの位置を復元"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:488
msgctxt "@info:tooltip"
msgid "What type of camera rendering should be used?"
msgstr "どのような種類のカメラレンダリングを使用する必要がありますか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495
msgctxt "@window:text"
-msgid "Camera rendering: "
-msgstr "カメラレンダリング: "
+msgid "Camera rendering:"
+msgstr "カメラレンダリング:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506
msgid "Perspective"
msgstr "パースペクティブ表示"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507
msgid "Orthographic"
msgstr "平行投影表示"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538
msgctxt "@label"
msgid "Opening and saving files"
msgstr "ファイルを開くまた保存"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:545
msgctxt "@info:tooltip"
msgid "Should models be scaled to the build volume if they are too large?"
msgstr "モデルがビルドボリュームに対して大きすぎる場合はスケールされるべきか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:550
msgctxt "@option:check"
msgid "Scale large models"
msgstr "大きなモデルをスケールする"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:560
msgctxt "@info:tooltip"
msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?"
msgstr "ユニット値がミリメートルではなくメートルの場合、モデルが極端に小さく現れる場合があります。モデルはスケールアップされるべきですか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:565
msgctxt "@option:check"
msgid "Scale extremely small models"
msgstr "極端に小さなモデルをスケールアップする"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575
msgctxt "@info:tooltip"
msgid "Should models be selected after they are loaded?"
msgstr "モデルはロード後に選択しますか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:580
msgctxt "@option:check"
msgid "Select models when loaded"
msgstr "ロード後にモデルを選択"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590
msgctxt "@info:tooltip"
msgid "Should a prefix based on the printer name be added to the print job name automatically?"
msgstr "プリンター名の敬称はプリントジョブの名前に自動的に加えられるべきか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:595
msgctxt "@option:check"
msgid "Add machine prefix to job name"
msgstr "プリンターの敬称をジョブネームに加える"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:605
msgctxt "@info:tooltip"
msgid "Should a summary be shown when saving a project file?"
msgstr "プロジェクトファイルを保存時にサマリーを表示するべきか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609
msgctxt "@option:check"
msgid "Show summary dialog when saving project"
msgstr "プロジェクトを保存時にダイアログサマリーを表示する"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
msgctxt "@info:tooltip"
msgid "Default behavior when opening a project file"
msgstr "プロジェクトファイルを開く際のデフォルト機能"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:627
msgctxt "@window:text"
msgid "Default behavior when opening a project file: "
msgstr "プロジェクトファイル開く際のデフォルト機能: "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641
msgctxt "@option:openProject"
msgid "Always ask me this"
msgstr "毎回確認する"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:642
msgctxt "@option:openProject"
msgid "Always open as a project"
msgstr "常にプロジェクトとして開く"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:643
msgctxt "@option:openProject"
msgid "Always import models"
msgstr "常にモデルを取り込む"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:679
msgctxt "@info:tooltip"
msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again."
msgstr "プロファイル内を変更し異なるプロファイルにしました、どこの変更点を保持、破棄したいのダイアログが表示されます、また何度もダイアログが表示されないようにデフォルト機能を選ぶことができます。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:52
msgctxt "@label"
msgid "Profiles"
msgstr "プロファイル"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:693
msgctxt "@window:text"
msgid "Default behavior for changed setting values when switching to a different profile: "
msgstr "プロファイル交換時に設定値を変更するためのデフォルト処理: "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:707
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157
msgctxt "@option:discardOrKeep"
msgid "Always ask me this"
msgstr "毎回確認する"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708
msgctxt "@option:discardOrKeep"
msgid "Always discard changed settings"
msgstr "常に変更した設定を廃棄する"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:709
msgctxt "@option:discardOrKeep"
msgid "Always transfer changed settings to new profile"
msgstr "常に変更した設定を新しいプロファイルに送信する"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743
msgctxt "@label"
msgid "Privacy"
msgstr "プライバシー"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:750
msgctxt "@info:tooltip"
msgid "Should Cura check for updates when the program is started?"
msgstr "Curaのプログラム開始時にアップデートがあるかチェックしますか?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:755
msgctxt "@option:check"
msgid "Check for updates on start"
msgstr "スタート時にアップデートあるかどうかのチェック"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:765
msgctxt "@info:tooltip"
msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored."
msgstr "プリンターの不明なデータをUltimakerにおくりますか?メモ、モデル、IPアドレス、個人的な情報は送信されたり保存されたりはしません。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:770
msgctxt "@option:check"
msgid "Send (anonymous) print information"
msgstr "(不特定な) プリントインフォメーションを送信"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:779
msgctxt "@action:button"
msgid "More information"
msgstr "詳細"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:774
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:27
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ProfileMenu.qml:23
-msgctxt "@label"
-msgid "Experimental"
-msgstr "実験"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781
-msgctxt "@info:tooltip"
-msgid "Use multi build plate functionality"
-msgstr "マルチビルドプレート機能を使用"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786
-msgctxt "@option:check"
-msgid "Use multi build plate functionality (restart required)"
-msgstr "マルチビルドプレート機能を使用 (再起動が必要)"
-
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415
msgctxt "@title:tab"
@@ -3364,93 +3347,84 @@ msgid "Printers"
msgstr "プリンター"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152
msgctxt "@action:button"
msgid "Rename"
msgstr "名を変える"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:34
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419
msgctxt "@title:tab"
msgid "Profiles"
msgstr "プロファイル"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:104
msgctxt "@label"
msgid "Create"
msgstr "作成する"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
msgctxt "@label"
msgid "Duplicate"
msgstr "複製"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:202
msgctxt "@title:window"
msgid "Create Profile"
msgstr "プロファイルを作る"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:204
msgctxt "@info"
msgid "Please provide a name for this profile."
msgstr "このプロファイルの名前を指定してください。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:260
msgctxt "@title:window"
msgid "Duplicate Profile"
msgstr "プロファイルを複製する"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:291
msgctxt "@title:window"
msgid "Rename Profile"
msgstr "プロファイル名を変える"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:304
msgctxt "@title:window"
msgid "Import Profile"
msgstr "プロファイルを取り込む"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:333
msgctxt "@title:window"
msgid "Export Profile"
msgstr "プロファイルを書き出す"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:396
msgctxt "@label %1 is printer name"
msgid "Printer: %1"
msgstr "プリンター:%1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Default profiles"
-msgstr "デフォルトプロファイル"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Custom profiles"
-msgstr "カスタムプロファイル"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:554
msgctxt "@action:button"
msgid "Update profile with current settings/overrides"
msgstr "プロファイルを現在のセッティング"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:561
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:257
msgctxt "@action:button"
msgid "Discard current changes"
msgstr "今の変更を破棄する"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:580
msgctxt "@action:label"
msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below."
msgstr "このプロファイルはプリンターによりデフォルトを使用、従いこのプロファイルはセッティング/書き換えが以下のリストにありません。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:588
msgctxt "@action:label"
msgid "Your current settings match the selected profile."
msgstr "設定は選択したプロファイルにマッチしています。"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:606
msgctxt "@title:tab"
msgid "Global Settings"
msgstr "グローバル設定"
@@ -3515,35 +3489,35 @@ msgstr "無題"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:68
msgctxt "@label:textbox"
-msgid "search settings"
+msgid "Search settings"
msgstr "検索設定"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:462
msgctxt "@action:menu"
msgid "Copy value to all extruders"
msgstr "すべてのエクストルーダーの値をコピーする"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:471
msgctxt "@action:menu"
msgid "Copy all changed values to all extruders"
msgstr "すべてのエクストルーダーに対して変更された値をコピーする"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:508
msgctxt "@action:menu"
msgid "Hide this setting"
msgstr "この設定を非表示にする"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:521
msgctxt "@action:menu"
msgid "Don't show this setting"
msgstr "この設定を表示しない"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
msgctxt "@action:menu"
msgid "Keep this setting visible"
msgstr "常に見えるように設定する"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434
msgctxt "@action:menu"
msgid "Configure setting visibility..."
@@ -3574,17 +3548,17 @@ msgctxt "@label Header for list of settings."
msgid "Affected By"
msgstr "次によって影響を受ける"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:187
msgctxt "@label"
msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders."
msgstr "この設定は常に全てのエクストルーダーに共有されています。ここですべてのエクストルーダーの数値を変更できます。"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:191
msgctxt "@label"
msgid "The value is resolved from per-extruder values "
msgstr "この値は各エクストルーダーの値から取得します "
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:230
msgctxt "@label"
msgid ""
"This setting has a value that is different from the profile.\n"
@@ -3594,7 +3568,7 @@ msgstr ""
"この設定にプロファイルと異なった値があります。\n"
"プロファイルの値を戻すためにクリックしてください。"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:329
msgctxt "@label"
msgid ""
"This setting is normally calculated, but it currently has an absolute value set.\n"
@@ -3604,6 +3578,12 @@ msgstr ""
"このセッティングは通常計算されます、今は絶対値に固定されています。\n"
"計算された値に変更するためにクリックを押してください。"
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/NoIntentIcon.qml:31
+msgctxt "@label %1 is filled in with the type of a profile. %2 is filled with a list of numbers (eg '1' or '1, 2')"
+msgid "There is no %1 profile for the configuration in extruder %2. The default intent will be used instead"
+msgid_plural "There is no %1 profile for the configurations in extruders %2. The default intent will be used instead"
+msgstr[0] ""
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:144
msgctxt "@button"
msgid "Recommended"
@@ -3644,26 +3624,11 @@ msgctxt "@label"
msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards."
msgstr "ブリムまたはラフトのプリントの有効化。それぞれ、プリントの周り、また造形物の下に底面を加え切り取りやすくします。"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:175
-msgctxt "@label"
-msgid "Layer Height"
-msgstr "レイヤーの高さ"
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:206
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:81
msgctxt "@tooltip"
msgid "You have modified some profile settings. If you want to change these go to custom mode."
msgstr "プロファイルの設定がいくつか変更されました。変更を有効にするにはカスタムモードに移動してください。"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:355
-msgctxt "@tooltip"
-msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
-msgstr "この品質プロファイルは、現在の材料およびノズル構成では使用できません。この品質プロファイルを有効にするには、これらを変更してください。"
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449
-msgctxt "@tooltip"
-msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
-msgstr "カスタムプロファイルが有効になっています。品質スライダーを有効にするには、カスタムタブでデフォルトの品質プロファイルを選択してください"
-
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:13
msgctxt "@label:Should be short"
msgid "On"
@@ -3674,12 +3639,17 @@ msgctxt "@label:Should be short"
msgid "Off"
msgstr "オフ"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:27
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:33
+msgctxt "@label"
+msgid "Experimental"
+msgstr "実験"
+
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:47
msgctxt "@label"
msgid "Profile"
msgstr "プロファイル"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:94
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:172
msgctxt "@tooltip"
msgid ""
"Some setting/override values are different from the values stored in the profile.\n"
@@ -3689,6 +3659,11 @@ msgstr ""
"いくらかの設定プロファイルにある値とことなる場合無効にします。\n"
"プロファイルマネージャーをクリックして開いてください。"
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:160
+msgctxt "@label:header"
+msgid "Custom profiles"
+msgstr "カスタムプロファイル"
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:21
msgctxt "@label shown when we load a Gcode file"
msgid "Print setup disabled. G-code file can not be modified."
@@ -3816,11 +3791,16 @@ msgctxt "@label:category menu label"
msgid "Material"
msgstr "材料"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:42
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:46
msgctxt "@label:category menu label"
msgid "Favorites"
msgstr "お気に入り"
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:71
+msgctxt "@label:category menu label"
+msgid "Generic"
+msgstr "汎用"
+
#: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25
msgctxt "@label:category menu label"
msgid "Network enabled printers"
@@ -3856,16 +3836,6 @@ msgctxt "@action:inmenu"
msgid "Disable Extruder"
msgstr "エクストルーダーを無効にする"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63
-msgctxt "@title:menu"
-msgid "&Build plate"
-msgstr "ビルドプレート (&B)"
-
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66
-msgctxt "@title:settings"
-msgid "&Profile"
-msgstr "&プロファイル"
-
#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:19
msgctxt "@action:inmenu menubar:view"
msgid "&Camera position"
@@ -3945,12 +3915,12 @@ msgctxt "@header"
msgid "Configurations"
msgstr "構成"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:110
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:112
msgctxt "@label"
msgid "Select configuration"
msgstr "構成の選択"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:223
msgctxt "@label"
msgid "Configurations"
msgstr "構成"
@@ -3980,12 +3950,12 @@ msgctxt "@label"
msgid "Enabled"
msgstr "有効"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:251
msgctxt "@label"
msgid "Material"
msgstr "フィラメント"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:375
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:378
msgctxt "@label"
msgid "Use glue for better adhesion with this material combination."
msgstr "この材料の組み合わせの接着に接着材を使用する。"
@@ -4402,44 +4372,44 @@ msgctxt "@title:tab"
msgid "Settings"
msgstr "設定"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538
msgctxt "@title:window"
msgid "Closing Cura"
msgstr "Cura を閉じる"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551
msgctxt "@label"
msgid "Are you sure you want to exit Cura?"
msgstr "Cura を終了しますか?"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:589
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19
msgctxt "@title:window"
msgid "Open file(s)"
msgstr "ファイルを開く"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:695
msgctxt "@window:title"
msgid "Install Package"
msgstr "パッケージをインストール"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:703
msgctxt "@title:window"
msgid "Open File(s)"
msgstr "ファイルを開く(s)"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:706
msgctxt "@text:window"
msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one."
msgstr "選択したファイルの中に複数のG-codeが存在します。1つのG-codeのみ一度に開けます。G-codeファイルを開く場合は、1点のみ選んでください。"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:809
msgctxt "@title:window"
msgid "Add Printer"
msgstr "プリンターを追加する"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:817
msgctxt "@title:window"
msgid "What's New"
msgstr "新情報"
@@ -4508,139 +4478,139 @@ msgctxt "@title:window"
msgid "About Cura"
msgstr "Curaについて"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:56
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:57
msgctxt "@label"
msgid "version: %1"
msgstr "バージョン: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:72
msgctxt "@label"
msgid "End-to-end solution for fused filament 3D printing."
msgstr "熱溶解積層型3Dプリンティングのエンドtoエンドソリューション。"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:84
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:85
msgctxt "@info:credit"
msgid ""
"Cura is developed by Ultimaker B.V. in cooperation with the community.\n"
"Cura proudly uses the following open source projects:"
msgstr "CuraはUltimakerB.Vのコミュニティの協力によって開発され、Curaはオープンソースで使えることを誇りに思います:"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
msgctxt "@label"
msgid "Graphical user interface"
msgstr "グラフィックユーザーインターフェイス"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
msgctxt "@label"
msgid "Application framework"
msgstr "アプリケーションフレームワーク"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
msgctxt "@label"
msgid "G-code generator"
msgstr "G-codeの生成"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:138
msgctxt "@label"
msgid "Interprocess communication library"
msgstr "インタープロセスコミュニケーションライブラリー"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:139
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
msgctxt "@label"
msgid "Programming language"
msgstr "プログラミング用語"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
msgctxt "@label"
msgid "GUI framework"
msgstr "GUIフレームワーク"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
msgctxt "@label"
msgid "GUI framework bindings"
msgstr "GUIフレームワークバインディング"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
msgctxt "@label"
msgid "C/C++ Binding library"
msgstr "C/C++ バインディングライブラリー"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
msgctxt "@label"
msgid "Data interchange format"
msgstr "データインターフェイスフォーマット"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
msgctxt "@label"
msgid "Support library for scientific computing"
msgstr "サイエンスコンピューティングを操作するためのライブラリーサポート"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
msgctxt "@label"
msgid "Support library for faster math"
msgstr "ファターマスを操作するためのライブラリーサポート"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
msgctxt "@label"
msgid "Support library for handling STL files"
msgstr "STLファイルを操作するためのライブラリーサポート"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
msgctxt "@label"
msgid "Support library for handling planar objects"
msgstr "平面対象物を操作するためのライブラリーサポート"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
msgctxt "@label"
msgid "Support library for handling triangular meshes"
msgstr "参画メッシュを操作するためのライブラリーサポート"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
msgctxt "@label"
msgid "Support library for analysis of complex networks"
msgstr "複雑なネットワークを分析するためのライブラリーサポート"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
msgctxt "@label"
msgid "Support library for handling 3MF files"
msgstr "3MFファイルを操作するためのライブラリーサポート"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
msgctxt "@label"
msgid "Support library for file metadata and streaming"
msgstr "ファイルメタデータとストリーミングのためのライブラリーサポート"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
msgctxt "@label"
msgid "Serial communication library"
msgstr "シリアルコミュニケーションライブラリー"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
msgctxt "@label"
msgid "ZeroConf discovery library"
msgstr "ZeroConfディスカバリーライブラリー"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
msgctxt "@label"
msgid "Polygon clipping library"
msgstr "ポリゴンクリッピングライブラリー"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:156
msgctxt "@Label"
msgid "Python HTTP library"
msgstr "Python HTTPライブラリー"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:157
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
msgctxt "@label"
msgid "Font"
msgstr "フォント"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
msgctxt "@label"
msgid "SVG icons"
msgstr "SVGアイコン"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:160
msgctxt "@label"
msgid "Linux cross-distribution application deployment"
msgstr "Linux 分散アプリケーションの開発"
@@ -4660,32 +4630,27 @@ msgctxt "@title:window"
msgid "Save Project"
msgstr "プロジェクトを保存"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149
-msgctxt "@action:label"
-msgid "Build plate"
-msgstr "ビルドプレート"
-
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:177
msgctxt "@action:label"
msgid "Extruder %1"
msgstr "エクストルーダー%1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:192
msgctxt "@action:label"
msgid "%1 & material"
msgstr "%1とフィラメント"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:194
msgctxt "@action:label"
msgid "Material"
msgstr "材料"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
msgctxt "@action:label"
msgid "Don't show project summary on save again"
msgstr "保存中のプロジェクトサマリーを非表示にする"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:302
msgctxt "@action:button"
msgid "Save"
msgstr "保存"
@@ -4861,12 +4826,12 @@ msgctxt "@label"
msgid "Troubleshooting"
msgstr "トラブルシューティング"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:211
msgctxt "@label"
msgid "Printer name"
msgstr "プリンター名"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:224
msgctxt "@text"
msgid "Please give your printer a name"
msgstr "プリンター名を入力してください"
@@ -4925,6 +4890,31 @@ msgctxt "@button"
msgid "Get started"
msgstr "はじめに"
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:27
+msgctxt "@info:tooltip"
+msgid "3D View"
+msgstr "3Dビュー"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:40
+msgctxt "@info:tooltip"
+msgid "Front View"
+msgstr "フロントビュー"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:53
+msgctxt "@info:tooltip"
+msgid "Top View"
+msgstr "トップビュー"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:66
+msgctxt "@info:tooltip"
+msgid "Left View"
+msgstr "左ビュー"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:79
+msgctxt "@info:tooltip"
+msgid "Right View"
+msgstr "右ビュー"
+
#: MachineSettingsAction/plugin.json
msgctxt "description"
msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)."
@@ -4985,16 +4975,6 @@ msgctxt "name"
msgid "Model Checker"
msgstr "モデルチェッカー"
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "description"
-msgid "Dump the contents of all settings to a HTML file."
-msgstr "HTMLファイルに設定内容を放置する。"
-
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "name"
-msgid "God Mode"
-msgstr "Godモード"
-
#: FirmwareUpdater/plugin.json
msgctxt "description"
msgid "Provides a machine actions for updating firmware."
@@ -5005,16 +4985,6 @@ msgctxt "name"
msgid "Firmware Updater"
msgstr "ファームウェアアップデーター"
-#: ProfileFlattener/plugin.json
-msgctxt "description"
-msgid "Create a flattened quality changes profile."
-msgstr "プロファイルを変更するフラットエンドクオリティーを作成する。"
-
-#: ProfileFlattener/plugin.json
-msgctxt "name"
-msgid "Profile Flattener"
-msgstr "プロファイルフラッター"
-
#: AMFReader/plugin.json
msgctxt "description"
msgid "Provides support for reading AMF files."
@@ -5215,6 +5185,16 @@ msgctxt "name"
msgid "Version Upgrade 3.3 to 3.4"
msgstr "3.3から3.4にバージョンアップグレート"
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "description"
+msgid "Upgrades configurations from Cura 4.3 to Cura 4.4."
+msgstr "Cura 4.3からCura 4.4へのコンフィグレーションアップグレート。"
+
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "name"
+msgid "Version Upgrade 4.3 to 4.4"
+msgstr "4.3から4.4にバージョンアップグレート"
+
#: VersionUpgrade/VersionUpgrade25to26/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 2.5 to Cura 2.6."
@@ -5415,16 +5395,6 @@ msgctxt "name"
msgid "Cura Profile Writer"
msgstr "Curaプロファイルライター"
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "description"
-msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
-msgstr "材料メーカーがドロップインUIを使用して新しい材料と品質のプロファイルを作成できるようにします。"
-
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "name"
-msgid "Print Profile Assistant"
-msgstr "プリントプロファイルアシスタント"
-
#: 3MFWriter/plugin.json
msgctxt "description"
msgid "Provides support for writing 3MF files."
@@ -5465,6 +5435,158 @@ msgctxt "name"
msgid "Cura Profile Reader"
msgstr "Curaプロファイルリーダー"
+#~ msgctxt "@item:inmenu"
+#~ msgid "Flatten active settings"
+#~ msgstr "アクティブ設定を平らにします"
+
+#~ msgctxt "@info:status"
+#~ msgid "Profile has been flattened & activated."
+#~ msgstr "プロファイルが平らになり、アクティベートされました。"
+
+#~ msgctxt "X3g Writer Plugin Description"
+#~ msgid "Writes X3g to files"
+#~ msgstr "X3Gをファイルに書き込む"
+
+#~ msgctxt "X3g Writer File Description"
+#~ msgid "X3g File"
+#~ msgstr "X3Gファイル"
+
+#~ msgctxt "X3G Writer File Description"
+#~ msgid "X3G File"
+#~ msgstr "X3Gファイル"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Open Compressed Triangle Mesh"
+#~ msgstr "圧縮トライアングルメッシュを開く"
+
+#~ msgctxt "@item:inmenu"
+#~ msgid "Profile Assistant"
+#~ msgstr "プロファイルアシスタント"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Profile Assistant"
+#~ msgstr "プロファイルアシスタント"
+
+#~ msgctxt "@action:button"
+#~ msgid "Retry"
+#~ msgstr "再試行"
+
+#~ msgctxt "@label:table_header"
+#~ msgid "Print Core"
+#~ msgstr "プリントコア"
+
+#~ msgctxt "@label"
+#~ msgid "Don't support overlap with other models"
+#~ msgstr "他のモデルとのオーバーラップは未サポート"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for overlap with other models"
+#~ msgstr "他のモデルとのオーバーラップの設定を変更"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for infill of other models"
+#~ msgstr "他のモデルのインフィルの設定を変更"
+
+#~ msgctxt "@action:ComboBox option"
+#~ msgid "Update existing"
+#~ msgstr "現在のプロファイルに読み込む"
+
+#~ msgctxt "@label"
+#~ msgid "Not supported"
+#~ msgstr "サポート対象外"
+
+#~ msgctxt "@action:button"
+#~ msgid "Previous"
+#~ msgstr "前"
+
+#~ msgctxt "@label"
+#~ msgid "Tip"
+#~ msgstr "ヒント"
+
+#~ msgctxt "@label"
+#~ msgid "Print experiment"
+#~ msgstr "試し印刷"
+
+#~ msgctxt "@label"
+#~ msgid "Checklist"
+#~ msgstr "チェックリスト"
+
+#~ msgctxt "@label"
+#~ msgid "Please select any upgrades made to this Ultimaker 2."
+#~ msgstr "このUltimaker2に施したアップグレードを選択してください。"
+
+#~ msgctxt "@label"
+#~ msgid "Olsson Block"
+#~ msgstr "Olsson Block"
+
+#~ msgctxt "@window:text"
+#~ msgid "Camera rendering: "
+#~ msgstr "カメラレンダリング: "
+
+#~ msgctxt "@info:tooltip"
+#~ msgid "Use multi build plate functionality"
+#~ msgstr "マルチビルドプレート機能を使用"
+
+#~ msgctxt "@option:check"
+#~ msgid "Use multi build plate functionality (restart required)"
+#~ msgstr "マルチビルドプレート機能を使用 (再起動が必要)"
+
+#~ msgctxt "@label"
+#~ msgid "Default profiles"
+#~ msgstr "デフォルトプロファイル"
+
+#~ msgctxt "@label:textbox"
+#~ msgid "search settings"
+#~ msgstr "検索設定"
+
+#~ msgctxt "@label"
+#~ msgid "Layer Height"
+#~ msgstr "レイヤーの高さ"
+
+#~ msgctxt "@tooltip"
+#~ msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
+#~ msgstr "この品質プロファイルは、現在の材料およびノズル構成では使用できません。この品質プロファイルを有効にするには、これらを変更してください。"
+
+#~ msgctxt "@tooltip"
+#~ msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
+#~ msgstr "カスタムプロファイルが有効になっています。品質スライダーを有効にするには、カスタムタブでデフォルトの品質プロファイルを選択してください"
+
+#~ msgctxt "@title:menu"
+#~ msgid "&Build plate"
+#~ msgstr "ビルドプレート (&B)"
+
+#~ msgctxt "@title:settings"
+#~ msgid "&Profile"
+#~ msgstr "&プロファイル"
+
+#~ msgctxt "@action:label"
+#~ msgid "Build plate"
+#~ msgstr "ビルドプレート"
+
+#~ msgctxt "description"
+#~ msgid "Dump the contents of all settings to a HTML file."
+#~ msgstr "HTMLファイルに設定内容を放置する。"
+
+#~ msgctxt "name"
+#~ msgid "God Mode"
+#~ msgstr "Godモード"
+
+#~ msgctxt "description"
+#~ msgid "Create a flattened quality changes profile."
+#~ msgstr "プロファイルを変更するフラットエンドクオリティーを作成する。"
+
+#~ msgctxt "name"
+#~ msgid "Profile Flattener"
+#~ msgstr "プロファイルフラッター"
+
+#~ msgctxt "description"
+#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
+#~ msgstr "材料メーカーがドロップインUIを使用して新しい材料と品質のプロファイルを作成できるようにします。"
+
+#~ msgctxt "name"
+#~ msgid "Print Profile Assistant"
+#~ msgstr "プリントプロファイルアシスタント"
+
#~ msgctxt "@info:status"
#~ msgid "Connected over the network."
#~ msgstr "ネットワーク上で接続。"
diff --git a/resources/i18n/ja_JP/fdmextruder.def.json.po b/resources/i18n/ja_JP/fdmextruder.def.json.po
index 60e0f20176..d2a33a2db3 100644
--- a/resources/i18n/ja_JP/fdmextruder.def.json.po
+++ b/resources/i18n/ja_JP/fdmextruder.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-03-13 14:00+0200\n"
"Last-Translator: Bothof \n"
"Language-Team: Japanese\n"
diff --git a/resources/i18n/ja_JP/fdmprinter.def.json.po b/resources/i18n/ja_JP/fdmprinter.def.json.po
index 82890ad028..a53f3de7ca 100644
--- a/resources/i18n/ja_JP/fdmprinter.def.json.po
+++ b/resources/i18n/ja_JP/fdmprinter.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-09-23 14:15+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: Japanese , Japanese \n"
@@ -1073,6 +1073,16 @@ msgctxt "bottom_layers description"
msgid "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number."
msgstr "最底面のレイヤー数。下の厚さで計算すると、この値は整数に変換されます。"
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers label"
+msgid "Initial Bottom Layers"
+msgstr "初期底面レイヤー"
+
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers description"
+msgid "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number."
+msgstr "ビルドプレートから上にある初期底面レイヤーの数。下の厚さで計算すると、この値は整数に変換されます。"
+
#: fdmprinter.def.json
msgctxt "top_bottom_pattern label"
msgid "Top/Bottom Pattern"
@@ -4096,8 +4106,8 @@ msgstr "最小サポートインターフェイス領域"
#: fdmprinter.def.json
msgctxt "minimum_interface_area description"
-msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
-msgstr "インターフェイスポリゴンをサポートする最小領域サイズ。この領域よりポリゴンが小さい場合は生成されません。"
+msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "サポートインターフェイスポリゴンの最小領域サイズ。この値より小さい領域のポリゴンは通常のサポートとしてプリントされます。"
#: fdmprinter.def.json
msgctxt "minimum_roof_area label"
@@ -4106,8 +4116,8 @@ msgstr "最小サポートルーフ領域"
#: fdmprinter.def.json
msgctxt "minimum_roof_area description"
-msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "サポートのルーフに対する最小領域サイズ。この領域よりポリゴンが小さい場合は生成されません。"
+msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "サポートのルーフの最小領域サイズ。この値より小さい領域のポリゴンは通常のサポートとしてプリントされます。"
#: fdmprinter.def.json
msgctxt "minimum_bottom_area label"
@@ -4116,8 +4126,8 @@ msgstr "最小サポートフロア領域"
#: fdmprinter.def.json
msgctxt "minimum_bottom_area description"
-msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "サポートのフロアに対する最小領域サイズ。この領域よりポリゴンが小さい場合は生成されません。"
+msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "サポートのフロアの最小領域サイズ。この値より小さい領域のポリゴンは通常のサポートとしてプリントされます。"
#: fdmprinter.def.json
msgctxt "support_interface_offset label"
@@ -4910,6 +4920,36 @@ msgctxt "remove_empty_first_layers description"
msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle."
msgstr "最初に印刷したレイヤーの下に空のレイヤーがある場合は取り除きます。この設定を無効にすると、スライストレランスが「排他」または「中間」に設定されている場合に最初のレイヤーが空になる原因になります。"
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution label"
+msgid "Maximum Resolution"
+msgstr "最大解像度"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution description"
+msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
+msgstr "スライス後の線分の最小サイズ。これを増やすと、メッシュの解像度が低くなります。これにより、プリンタが g コードの処理速度に追いつくことができ、処理できないメッシュの詳細を取り除いてスライス速度を速めます。"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution label"
+msgid "Maximum Travel Resolution"
+msgstr "最大移動解像度"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution description"
+msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
+msgstr "スライス後の移動線分の最小サイズ。これを増やすと、移動の跡が滑らかでなくなります。これにより、プリンタが g コードの処理速度に追いつくことができますが、精度が低下します。"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation label"
+msgid "Maximum Deviation"
+msgstr "最大偏差"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation description"
+msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
+msgstr "最大解像度設定の解像度を下げるときに許容される最大偏差です。これを大きくすると印刷の精度は低くなりますが、g-codeは小さくなります。最大偏差は最大解像度の限度であるため、最大偏差でこの2つが競合する場合には常にtrueとなります。"
+
#: fdmprinter.def.json
msgctxt "blackmagic label"
msgid "Special Modes"
@@ -5296,36 +5336,6 @@ msgctxt "minimum_polygon_circumference description"
msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details."
msgstr "この量よりも小さい円周を持つスライスレイヤーのポリゴンは、除外されます。値を小さくすると、スライス時間のコストで、メッシュの解像度が高くなります。つまり、ほとんどが高解像 SLA プリンター、極小多機能 3D モデルです。"
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution label"
-msgid "Maximum Resolution"
-msgstr "最大解像度"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution description"
-msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
-msgstr "スライス後の線分の最小サイズ。これを増やすと、メッシュの解像度が低くなります。これにより、プリンタが g コードの処理速度に追いつくことができ、処理できないメッシュの詳細を取り除いてスライス速度を速めます。"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution label"
-msgid "Maximum Travel Resolution"
-msgstr "最大移動解像度"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution description"
-msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
-msgstr "スライス後の移動線分の最小サイズ。これを増やすと、移動の跡が滑らかでなくなります。これにより、プリンタが g コードの処理速度に追いつくことができますが、精度が低下します。"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation label"
-msgid "Maximum Deviation"
-msgstr "最大偏差"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation description"
-msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
-msgstr "最大解像度設定の解像度を下げるときに許容される最大偏差です。これを大きくすると印刷の精度は低くなりますが、g-codeは小さくなります。最大偏差は最大解像度の限度であるため、最大偏差でこの2つが競合する場合には常にtrueとなります。"
-
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
msgid "Break Up Support In Chunks"
@@ -5469,16 +5479,6 @@ msgctxt "coasting_speed description"
msgid "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops."
msgstr "コースティング中の移動速度。印刷時の経路の速度設定に比例します。ボーデンチューブの圧力が低下するので、100%よりわずかに低い値が推奨される。"
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation label"
-msgid "Alternate Skin Rotation"
-msgstr "レイヤー回転変更"
-
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation description"
-msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
-msgstr "トップ/ボトムのレイヤーが印刷される方向を変更します。通常、それらは斜めに印刷されます。この設定では、X方向のみとY方向のみが追加されます。"
-
#: fdmprinter.def.json
msgctxt "cross_infill_pocket_size label"
msgid "Cross 3D Pocket Size"
@@ -5659,23 +5659,23 @@ msgstr "各線分に導入されたランダム点間の平均距離。ポリゴ
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset label"
-msgid "Flow rate compensation max extrusion offset"
+msgid "Flow Rate Compensation Max Extrusion Offset"
msgstr "流量補正時の最大抽出オフセット"
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset description"
-msgid "The maximum distance in mm to compensate."
-msgstr "補正の最大距離をミリ単位で指定します。"
+msgid "The maximum distance in mm to move the filament to compensate for changes in flow rate."
+msgstr "流量の変化を補正するためにフィラメントを移動する最大距離(mm)。"
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor label"
-msgid "Flow rate compensation factor"
+msgid "Flow Rate Compensation Factor"
msgstr "流量補正要因"
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor description"
-msgid "The multiplication factor for the flow rate -> distance translation."
-msgstr "流量を距離に変換する際の要因。"
+msgid "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."
+msgstr "流量の変化を補正するためにフィラメントを移動する距離。フィラメントが1秒の押出で移動する距離の割合として指定します。"
#: fdmprinter.def.json
msgctxt "wireframe_enabled label"
@@ -5966,13 +5966,13 @@ msgstr "次のレイヤーの高さを前のレイヤーの高さと比べた差
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold label"
-msgid "Adaptive Layers Threshold"
-msgstr "適応レイヤーしきい値"
+msgid "Adaptive Layers Topography Size"
+msgstr "適応レイヤーのトポグラフィーサイズ"
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold description"
-msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
-msgstr "小さいレイヤーを使用するかどうかの閾値。この値が、レイヤー中の最も急な斜面のタンジェントと比較されます。"
+msgid "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."
+msgstr "隣接する2つのレイヤー間の目標水平距離。この設定を小さくすると、レイヤーのエッジが近づくように薄いレイヤーが使用されます。"
#: fdmprinter.def.json
msgctxt "wall_overhang_angle label"
@@ -5981,8 +5981,8 @@ msgstr "張り出し壁アングル"
#: fdmprinter.def.json
msgctxt "wall_overhang_angle description"
-msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
-msgstr "この角度以上に張り出した壁は、オーバーハング壁設定を使用して印刷されます。値が 90 の場合は、オーバーハング壁として処理されません。"
+msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging. Overhang that gets supported by support will not be treated as overhang either."
+msgstr "この角度以上に張り出した壁は、オーバーハング壁設定を使用してプリントされます。値が90の場合は、オーバーハング壁として処理されません。サポートによってサポートされているオーバーハングも、オーバーハングとして処理されません。"
#: fdmprinter.def.json
msgctxt "wall_overhang_speed_factor label"
@@ -6361,18 +6361,18 @@ msgstr "Small Feature Speed"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor description"
-msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
-msgstr "小型形体は通常の印刷速度よりこの割合で印刷されます。低速の印刷によって、接着と精度が向上します。"
+msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
+msgstr "小型形体は通常のプリント速度に対してこの割合でプリントされます。低速でプリントすると、接着と精度が向上します。"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 label"
-msgid "First Layer Speed"
-msgstr "最初のレイヤー速度"
+msgid "Small Feature Initial Layer Speed"
+msgstr "小型形体の初期レイヤー速度"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 description"
-msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
-msgstr "小型形体の最初のレイヤーは通常の印刷速度よりこの割合で印刷されます。低速の印刷によって、接着と精度が向上します。"
+msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
+msgstr "最初のレイヤーの小型形体は通常のプリント速度に対してこの割合でプリントされます。低速でプリントすると、接着と精度が向上します。"
#: fdmprinter.def.json
msgctxt "command_line_settings label"
@@ -6434,6 +6434,66 @@ msgctxt "mesh_rotation_matrix description"
msgid "Transformation matrix to be applied to the model when loading it from file."
msgstr "ファイルから読み込むときに、モデルに適用するトランスフォーメーションマトリックス。"
+#~ msgctxt "minimum_interface_area description"
+#~ msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "インターフェイスポリゴンをサポートする最小領域サイズ。この領域よりポリゴンが小さい場合は生成されません。"
+
+#~ msgctxt "minimum_roof_area description"
+#~ msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "サポートのルーフに対する最小領域サイズ。この領域よりポリゴンが小さい場合は生成されません。"
+
+#~ msgctxt "minimum_bottom_area description"
+#~ msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "サポートのフロアに対する最小領域サイズ。この領域よりポリゴンが小さい場合は生成されません。"
+
+#~ msgctxt "skin_alternate_rotation label"
+#~ msgid "Alternate Skin Rotation"
+#~ msgstr "レイヤー回転変更"
+
+#~ msgctxt "skin_alternate_rotation description"
+#~ msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
+#~ msgstr "トップ/ボトムのレイヤーが印刷される方向を変更します。通常、それらは斜めに印刷されます。この設定では、X方向のみとY方向のみが追加されます。"
+
+#~ msgctxt "flow_rate_max_extrusion_offset label"
+#~ msgid "Flow rate compensation max extrusion offset"
+#~ msgstr "流量補正時の最大抽出オフセット"
+
+#~ msgctxt "flow_rate_max_extrusion_offset description"
+#~ msgid "The maximum distance in mm to compensate."
+#~ msgstr "補正の最大距離をミリ単位で指定します。"
+
+#~ msgctxt "flow_rate_extrusion_offset_factor label"
+#~ msgid "Flow rate compensation factor"
+#~ msgstr "流量補正要因"
+
+#~ msgctxt "flow_rate_extrusion_offset_factor description"
+#~ msgid "The multiplication factor for the flow rate -> distance translation."
+#~ msgstr "流量を距離に変換する際の要因。"
+
+#~ msgctxt "adaptive_layer_height_threshold label"
+#~ msgid "Adaptive Layers Threshold"
+#~ msgstr "適応レイヤーしきい値"
+
+#~ msgctxt "adaptive_layer_height_threshold description"
+#~ msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
+#~ msgstr "小さいレイヤーを使用するかどうかの閾値。この値が、レイヤー中の最も急な斜面のタンジェントと比較されます。"
+
+#~ msgctxt "wall_overhang_angle description"
+#~ msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
+#~ msgstr "この角度以上に張り出した壁は、オーバーハング壁設定を使用して印刷されます。値が 90 の場合は、オーバーハング壁として処理されません。"
+
+#~ msgctxt "small_feature_speed_factor description"
+#~ msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "小型形体は通常の印刷速度よりこの割合で印刷されます。低速の印刷によって、接着と精度が向上します。"
+
+#~ msgctxt "small_feature_speed_factor_0 label"
+#~ msgid "First Layer Speed"
+#~ msgstr "最初のレイヤー速度"
+
+#~ msgctxt "small_feature_speed_factor_0 description"
+#~ msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "小型形体の最初のレイヤーは通常の印刷速度よりこの割合で印刷されます。低速の印刷によって、接着と精度が向上します。"
+
# msgstr "アイロンを有効にする"
#~ msgctxt "ironing_enabled description"
#~ msgid "Go over the top surface one additional time, but without extruding material. This is meant to melt the plastic on top further, creating a smoother surface."
diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po
index a8841db42a..824cc276e8 100644
--- a/resources/i18n/ko_KR/cura.po
+++ b/resources/i18n/ko_KR/cura.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0200\n"
+"POT-Creation-Date: 2019-11-05 13:13+0100\n"
"PO-Revision-Date: 2019-09-23 14:16+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: Korean , Jinbum Kim , Korean \n"
@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.2.1\n"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:30
msgctxt "@action"
msgid "Machine Settings"
msgstr "기기 설정"
@@ -40,13 +40,13 @@ msgctxt "@item:inlistbox"
msgid "G-code File"
msgstr "G-code 파일"
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:66
msgctxt "@error:not supported"
msgid "GCodeWriter does not support non-text mode."
msgstr "GCodeWriter는 텍스트가 아닌 모드는 지원하지 않습니다."
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:72
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:88
msgctxt "@warning:status"
msgid "Please prepare G-code before exporting."
msgstr "내보내기 전에 G-code를 준비하십시오."
@@ -56,7 +56,7 @@ msgctxt "@info:title"
msgid "3D Model Assistant"
msgstr "3D 모델 도우미"
-#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:90
+#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:92
#, python-brace-format
msgctxt "@info:status"
msgid ""
@@ -75,16 +75,6 @@ msgctxt "@action"
msgid "Update Firmware"
msgstr "펌웨어 업데이트"
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23
-msgctxt "@item:inmenu"
-msgid "Flatten active settings"
-msgstr "활성 설정 병합"
-
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35
-msgctxt "@info:status"
-msgid "Profile has been flattened & activated."
-msgstr "프로파일이 병합되고 활성화되었습니다."
-
#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "AMF File"
@@ -125,21 +115,6 @@ msgctxt "@message"
msgid "Print in Progress"
msgstr "프린트 진행 중"
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
-msgctxt "X3g Writer Plugin Description"
-msgid "Writes X3g to files"
-msgstr "파일에 X3g 쓰기"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21
-msgctxt "X3g Writer File Description"
-msgid "X3g File"
-msgstr "X3g 파일"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15
-msgctxt "X3G Writer File Description"
-msgid "X3G File"
-msgstr "X3G 파일"
-
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17
#: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17
msgctxt "@item:inlistbox"
@@ -211,9 +186,9 @@ msgid "Could not save to removable drive {0}: {1}"
msgstr "이동식 드라이브 {0}: {1} 에 저장할 수 없습니다 :"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1634
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:139
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:146
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1668
msgctxt "@info:title"
msgid "Error"
msgstr "오류"
@@ -243,8 +218,8 @@ msgstr "이동식 장치 {0} 꺼내기"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1624
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1724
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1658
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1758
msgctxt "@info:title"
msgid "Warning"
msgstr "경고"
@@ -276,17 +251,17 @@ msgctxt "@action"
msgid "Connect via Network"
msgstr "네트워크를 통해 연결"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:57
msgctxt "@action:button Preceded by 'Ready to'."
msgid "Print over network"
msgstr "네트워크를 통해 프린팅"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:58
msgctxt "@properties:tooltip"
msgid "Print over network"
msgstr "네트워크를 통해 프린팅"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:59
msgctxt "@info:status"
msgid "Connected over the network"
msgstr "네트워크를 통해 연결됨"
@@ -301,6 +276,21 @@ msgctxt "@info:title"
msgid "Print error"
msgstr "프린트 오류"
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:21
+msgctxt "@info:title"
+msgid "New cloud printers found"
+msgstr "새 프린터를 찾을 수 없음"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:22
+msgctxt "@info:message"
+msgid "New printers have been found connected to your account, you can find them in your list of discovered printers."
+msgstr "새 프린터가 계정에 연결되어 있습니다. 발견한 프린터를 목록에서 찾을 수 있습니다."
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:27
+msgctxt "@info:option_text"
+msgid "Do not show this message again"
+msgstr "다시 메시지 표시 안 함"
+
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
@@ -501,7 +491,7 @@ msgid "GIF Image"
msgstr "GIF 이미지"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
-msgctxt "@item:inlistbox"
+msgctxt "@item:inlistbox 'Open' is part of the name of this file format."
msgid "Open Compressed Triangle Mesh"
msgstr "Open Compressed Triangle Mesh"
@@ -594,12 +584,12 @@ msgctxt "@info:tooltip"
msgid "Configure Per Model Settings"
msgstr "모델 별 설정 구성"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:186
msgctxt "@title:tab"
msgid "Recommended"
msgstr "추천"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:188
msgctxt "@title:tab"
msgid "Custom"
msgstr "사용자 정의"
@@ -610,19 +600,19 @@ msgctxt "@item:inlistbox"
msgid "3MF File"
msgstr "3MF 파일"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:198
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:651
msgctxt "@label"
msgid "Nozzle"
msgstr "노즐"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:496
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead."
msgstr "프로젝트 파일 {0}에 알 수 없는 기기 유형 {1}이(가) 포함되어 있습니다. 기기를 가져올 수 없습니다. 대신 모델을 가져옵니다."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:499
msgctxt "@info:title"
msgid "Open Project File"
msgstr "프로젝트 파일 열기"
@@ -702,16 +692,6 @@ msgctxt "@item:inlistbox"
msgid "Cura Profile"
msgstr "Cura 프로파일"
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12
-msgctxt "@item:inmenu"
-msgid "Profile Assistant"
-msgstr "프로파일 어시스턴트"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:18
-msgctxt "@item:inlistbox"
-msgid "Profile Assistant"
-msgstr "프로파일 어시스턴트"
-
#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26
msgctxt "@item:inlistbox"
msgid "3MF file"
@@ -732,7 +712,6 @@ msgctxt "@item:inmenu"
msgid "Preview"
msgstr "미리 보기"
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:19
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18
msgctxt "@action"
msgid "Select upgrades"
@@ -748,134 +727,148 @@ msgctxt "@info:title"
msgid "Login failed"
msgstr "로그인 실패"
-#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:36
msgctxt "@info:not supported profile"
msgid "Not supported"
msgstr "지원되지 않음"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:55
+msgctxt "@info:No intent profile selected"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:196
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:125
msgctxt "@title:window"
msgid "File Already Exists"
msgstr "파일이 이미 있습니다"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:197
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:126
#, python-brace-format
msgctxt "@label Don't translate the XML tag !"
msgid "The file {0} already exists. Are you sure you want to overwrite it?"
msgstr "파일 {0}이 이미 있습니다. 덮어 쓰시겠습니까?"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:427
#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:430
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:433
msgctxt "@info:status"
msgid "Invalid file URL:"
msgstr "유효하지 않은 파일 URL:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:780
msgctxt "@info:message Followed by a list of settings."
msgid "Settings have been changed to match the current availability of extruders:"
msgstr "익스트루더의 현재 가용성과 일치하도록 설정이 변경되었습니다:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:782
msgctxt "@info:title"
msgid "Settings updated"
msgstr "설정이 업데이트되었습니다"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1334
msgctxt "@info:title"
msgid "Extruder(s) Disabled"
msgstr "익스트루더 비활성화됨"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1457
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:99
+#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+msgctxt "@label"
+msgid "Unknown"
+msgstr "알 수 없는"
+
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Failed to export profile to {0}: {1}"
msgstr "프로파일을 {0}: {1}로 내보내는데 실패했습니다"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to export profile to {0}: Writer plugin reported failure."
msgstr "프로파일을 {0}로 내보내지 못했습니다. Writer 플러그인이 오류를 보고했습니다."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:149
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Exported profile to {0}"
msgstr "프로파일을 {0} 에 내보냅니다"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150
msgctxt "@info:title"
msgid "Export succeeded"
msgstr "내보내기 완료"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}: {1}"
msgstr "{0}에서 프로파일을 가져오지 못했습니다 {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:181
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Can't import profile from {0} before a printer is added."
msgstr "프린터가 추가되기 전 {0}에서 프로파일을 가져올 수 없습니다."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:198
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "No custom profile to import in file {0}"
msgstr "{0}(으)로 가져올 사용자 정의 프로파일이 없습니다"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:202
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}:"
msgstr "{0}에서 프로파일을 가져오지 못했습니다:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:226
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:236
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "This profile {0} contains incorrect data, could not import it."
msgstr "프로파일 {0}에는 정확하지 않은 데이터가 포함되어 있으므로, 불러올 수 없습니다."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:325
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to import profile from {0}:"
msgstr "{0}에서 프로파일을 가져오지 못했습니다:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:328
#, python-brace-format
msgctxt "@info:status"
msgid "Successfully imported profile {0}"
msgstr "프로파일 {0}을 성공적으로 가져 왔습니다."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:331
#, python-brace-format
msgctxt "@info:status"
msgid "File {0} does not contain any valid profile."
msgstr "파일 {0}에 유효한 프로파일이 포함되어 있지 않습니다."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:334
#, python-brace-format
msgctxt "@info:status"
msgid "Profile {0} has an unknown file type or is corrupted."
msgstr "프로파일 {0}에 알 수 없는 파일 유형이 있거나 손상되었습니다."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369
msgctxt "@label"
msgid "Custom profile"
msgstr "사용자 정의 프로파일"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:385
msgctxt "@info:status"
msgid "Profile is missing a quality type."
msgstr "프로파일에 품질 타입이 누락되었습니다."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:399
#, python-brace-format
msgctxt "@info:status"
msgid "Could not find a quality type {0} for the current configuration."
@@ -941,14 +934,13 @@ msgctxt "@tooltip"
msgid "Other"
msgstr "다른"
-#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:306
+#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:302
#, python-brace-format
msgctxt "@label"
msgid "Pre-sliced file {0}"
msgstr "미리 슬라이싱한 파일 {0}"
#: /home/ruben/Projects/Cura/cura/UI/WelcomePagesModel.py:56
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:62
msgctxt "@action:button"
msgid "Next"
msgstr "다음"
@@ -962,9 +954,9 @@ msgstr "그룹 #{group_nr}"
#: /home/ruben/Projects/Cura/cura/UI/WhatsNewPagesModel.py:17
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:133
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:169
msgctxt "@action:button"
msgid "Close"
msgstr "닫기"
@@ -979,40 +971,85 @@ msgstr "추가"
#: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:18
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:19
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:81
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:352
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:42
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:58
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:149
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:406
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:294
msgctxt "@action:button"
msgid "Cancel"
msgstr "취소"
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:36
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:320
+msgctxt "@label"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:39
+msgctxt "@label"
+msgid "Visual"
+msgstr "뛰어난 외관"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:40
+msgctxt "@text"
+msgid "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality."
+msgstr "시각적 프로파일은 높은 시각적 및 표면 품질의 의도를 지니고 시각적 프로토타입과 모델을 인쇄하기 위해 설계되었습니다."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:43
+msgctxt "@label"
+msgid "Engineering"
+msgstr "Engineering"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:44
+msgctxt "@text"
+msgid "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances."
+msgstr "엔지니어링 프로파일은 정확도를 개선하고 허용 오차를 좁히려는 의도로 기능 프로토타입 및 최종 사용 부품을 인쇄하도록 설계되었습니다."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:47
+msgctxt "@label"
+msgid "Draft"
+msgstr "초안"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:48
+msgctxt "@text"
+msgid "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction."
+msgstr "초안 프로파일은 인쇄 시간을 상당히 줄이려는 의도로 초기 프로토타입과 컨셉트 확인을 인쇄하도록 설계되었습니다."
+
#: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208
msgctxt "@menuitem"
msgid "Not overridden"
msgstr "재정의되지 않음"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:109
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:357
+msgctxt "@label"
+msgid "Custom profiles"
+msgstr "사용자 정의 프로파일"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:391
#, python-brace-format
msgctxt "@item:inlistbox"
msgid "All Supported Types ({0})"
msgstr "지원되는 모든 유형 ({0})"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:110
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:392
msgctxt "@item:inlistbox"
msgid "All Files (*)"
msgstr "모든 파일 (*)"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:213
msgctxt "@label"
-msgid "Unknown"
-msgstr "알 수 없는"
+msgid "Custom Material"
+msgstr "사용자 정의 소재"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:214
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:205
+msgctxt "@label"
+msgid "Custom"
+msgstr "사용자 정의"
#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116
msgctxt "@label"
@@ -1024,17 +1061,6 @@ msgctxt "@label"
msgid "Available networked printers"
msgstr "사용 가능한 네트워크 프린터"
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689
-msgctxt "@label"
-msgid "Custom Material"
-msgstr "사용자 정의 소재"
-
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:690
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:203
-msgctxt "@label"
-msgid "Custom"
-msgstr "사용자 정의"
-
#: /home/ruben/Projects/Cura/cura/BuildVolume.py:90
msgctxt "@info:status"
msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models."
@@ -1070,11 +1096,6 @@ msgctxt "@info"
msgid "Unable to reach the Ultimaker account server."
msgstr "Ultimaker 계정 서버에 도달할 수 없음."
-#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202
-msgctxt "@action:button"
-msgid "Retry"
-msgstr "재시도"
-
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70
msgctxt "@message"
msgid "Please give the required permissions when authorizing this application."
@@ -1259,62 +1280,67 @@ msgctxt "@action:button"
msgid "Send report"
msgstr "보고서 전송"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:513
msgctxt "@info:progress"
msgid "Loading machines..."
msgstr "기기로드 중 ..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:520
+msgctxt "@info:progress"
+msgid "Setting up preferences..."
+msgstr "환경 설정을 설정하는 중..."
+
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:824
msgctxt "@info:progress"
msgid "Setting up scene..."
msgstr "장면 설정 중..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:859
msgctxt "@info:progress"
msgid "Loading interface..."
msgstr "인터페이스 로드 중 ..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1150
#, python-format
msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm."
msgid "%(width).1f x %(depth).1f x %(height).1f mm"
msgstr "%(width).1f x %(depth).1f x %(height).1f mm"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1657
#, python-brace-format
msgctxt "@info:status"
msgid "Only one G-code file can be loaded at a time. Skipped importing {0}"
msgstr "한 번에 하나의 G-코드 파일만 로드 할 수 있습니다. {0} 가져 오기를 건너 뛰었습니다."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1667
#, python-brace-format
msgctxt "@info:status"
msgid "Can't open any other file if G-code is loading. Skipped importing {0}"
msgstr "G-코드가 로드되어 있으면 다른 파일을 열 수 없습니다. {0} 가져 오기를 건너 뛰었습니다."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1757
msgctxt "@info:status"
msgid "The selected model was too small to load."
msgstr "선택한 모델이 너무 작아서 로드할 수 없습니다."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:56
msgctxt "@title:label"
msgid "Printer Settings"
msgstr "프린터 설정"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70
msgctxt "@label"
msgid "X (Width)"
msgstr "X (너비)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:76
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:90
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:104
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:206
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:225
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:244
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:74
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:88
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:102
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:203
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:223
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:243
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:265
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:285
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:79
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:93
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:109
@@ -1323,57 +1349,57 @@ msgctxt "@label"
msgid "mm"
msgstr "mm"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84
msgctxt "@label"
msgid "Y (Depth)"
msgstr "Y (깊이)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98
msgctxt "@label"
msgid "Z (Height)"
msgstr "Z (높이)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112
msgctxt "@label"
msgid "Build plate shape"
msgstr "빌드 플레이트 모양"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125
msgctxt "@label"
msgid "Origin at center"
msgstr "중앙이 원점"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137
msgctxt "@label"
msgid "Heated bed"
msgstr "히트 베드"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149
msgctxt "@label"
msgid "Heated build volume"
msgstr "히팅 빌드 사이즈"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:161
msgctxt "@label"
msgid "G-code flavor"
msgstr "Gcode 유형"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:185
msgctxt "@title:label"
msgid "Printhead Settings"
msgstr "프린트헤드 설정"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:199
msgctxt "@label"
msgid "X min"
msgstr "X 최소값"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:219
msgctxt "@label"
msgid "Y min"
msgstr "Y 최소값"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:239
msgctxt "@label"
msgid "X max"
msgstr "X 최대값"
@@ -1383,22 +1409,22 @@ msgctxt "@label"
msgid "Y max"
msgstr "Y 최대값"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:281
msgctxt "@label"
msgid "Gantry Height"
msgstr "갠트리 높이"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:295
msgctxt "@label"
msgid "Number of Extruders"
msgstr "익스트루더의 수"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:355
msgctxt "@title:label"
msgid "Start G-code"
msgstr "시작 GCode"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:366
msgctxt "@title:label"
msgid "End G-code"
msgstr "End GCode"
@@ -1477,7 +1503,7 @@ msgstr "플러그인"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:77
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:44
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:89
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417
msgctxt "@title:tab"
msgid "Materials"
@@ -1672,11 +1698,6 @@ msgctxt "@label:table_header"
msgid "Machine"
msgstr "기기"
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131
-msgctxt "@label:table_header"
-msgid "Print Core"
-msgstr "프린트 코어"
-
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137
msgctxt "@label:table_header"
msgid "Build Plate"
@@ -1932,9 +1953,9 @@ msgid "Edit"
msgstr "편집"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:88
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:155
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:138
msgctxt "@action:button"
msgid "Remove"
msgstr "제거"
@@ -1955,61 +1976,61 @@ msgctxt "@label"
msgid "Type"
msgstr "유형"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:225
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274
msgctxt "@label"
msgid "Firmware version"
msgstr "펌웨어 버전"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:239
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:290
msgctxt "@label"
msgid "Address"
msgstr "주소"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:263
msgctxt "@label"
msgid "This printer is not set up to host a group of printers."
msgstr "이 프린터는 프린터 그룹을 호스트하도록 설정되어 있지 않습니다."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:267
msgctxt "@label"
msgid "This printer is the host for a group of %1 printers."
msgstr "이 프린터는 %1개 프린터 그룹의 호스트입니다."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:278
msgctxt "@label"
msgid "The printer at this address has not yet responded."
msgstr "이 주소의 프린터가 아직 응답하지 않았습니다."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283
msgctxt "@action:button"
msgid "Connect"
msgstr "연결"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:296
msgctxt "@title:window"
msgid "Invalid IP address"
msgstr "잘못된 IP 주소"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146
msgctxt "@text"
msgid "Please enter a valid IP address."
msgstr "유효한 IP 주소를 입력하십시오."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:308
msgctxt "@title:window"
msgid "Printer Address"
msgstr "프린터 주소"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:331
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102
msgctxt "@label"
msgid "Enter the IP address of your printer on the network."
msgstr "네트워크에 있는 프린터의 IP 주소를 입력하십시오."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181
msgctxt "@action:button"
@@ -2064,17 +2085,17 @@ msgctxt "@label:status"
msgid "Finishes %1 at %2"
msgstr "%2에서 %1 완료"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44
-msgctxt "@action:button"
-msgid "Print"
-msgstr "프린트"
-
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:11
msgctxt "@title:window"
msgid "Print over network"
msgstr "네트워크를 통해 프린팅"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:52
+msgctxt "@action:button"
+msgid "Print"
+msgstr "프린트"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:80
msgctxt "@label"
msgid "Printer selection"
msgstr "프린터 선택"
@@ -2422,70 +2443,69 @@ msgctxt "@action:label"
msgid "Smoothing"
msgstr "스무딩(smoothing)"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37
-msgctxt "@label"
-msgid "Mesh Type"
-msgstr "메쉬 유형"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68
-msgctxt "@label"
-msgid "Normal model"
-msgstr "일반 모델"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75
-msgctxt "@label"
-msgid "Print as support"
-msgstr "서포터로 프린팅"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83
-msgctxt "@label"
-msgid "Don't support overlap with other models"
-msgstr "다른 모델과 오버랩되도록 지원하지 않음"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91
-msgctxt "@label"
-msgid "Modify settings for overlap with other models"
-msgstr "다른 모델과의 오버랩에 대한 설정 수정"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99
-msgctxt "@label"
-msgid "Modify settings for infill of other models"
-msgstr "다른 모델의 내부채움에 대한 설정 수정"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:346
-msgctxt "@action:button"
-msgid "Select settings"
-msgstr "설정 선택"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:388
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:13
msgctxt "@title:window"
msgid "Select Settings to Customize for this model"
msgstr "이 모델에 맞게 사용자 정의 설정을 선택하십시오"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:56
#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:94
msgctxt "@label:textbox"
msgid "Filter..."
msgstr "필터..."
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:70
msgctxt "@label:checkbox"
msgid "Show all"
msgstr "모두 보이기"
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:44
+msgctxt "@label"
+msgid "Mesh Type"
+msgstr "메쉬 유형"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:85
+msgctxt "@label"
+msgid "Normal model"
+msgstr "일반 모델"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:97
+msgctxt "@label"
+msgid "Print as support"
+msgstr "서포터로 프린팅"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:109
+msgctxt "@label"
+msgid "Modify settings for overlaps"
+msgstr "오버랩 설정 수정"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:121
+msgctxt "@label"
+msgid "Don't support overlaps"
+msgstr "오버랩 지원 안함"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:145
+msgctxt "@action:checkbox"
+msgid "Infill only"
+msgstr "내부채움 전용"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:368
+msgctxt "@action:button"
+msgid "Select settings"
+msgstr "설정 선택"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:14
msgctxt "@title:window"
msgid "Open Project"
msgstr "프로젝트 열기"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:58
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Update/override existing profile"
msgid "Update existing"
msgstr "기존 업데이트"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:59
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Save settings in a new profile"
msgid "Create new"
msgstr "새로 만들기"
@@ -2512,6 +2532,11 @@ msgctxt "@action:ComboBox option"
msgid "Update"
msgstr "업데이트"
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
+msgctxt "@action:ComboBox option"
+msgid "Create new"
+msgstr "새로 만들기"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:106
msgctxt "@action:label"
@@ -2525,7 +2550,7 @@ msgid "Printer Group"
msgstr "프린터 그룹"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:220
msgctxt "@action:label"
msgid "Profile settings"
msgstr "프로파일 설정"
@@ -2536,73 +2561,79 @@ msgid "How should the conflict in the profile be resolved?"
msgstr "프로파일의 충돌을 어떻게 해결해야합니까?"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:323
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:244
msgctxt "@action:label"
msgid "Name"
msgstr "이름"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261
+msgctxt "@action:label"
+msgid "Intent"
+msgstr "Intent"
+
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:246
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228
msgctxt "@action:label"
msgid "Not in profile"
msgstr "프로파일에 없음"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:251
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:233
msgctxt "@action:label"
msgid "%1 override"
msgid_plural "%1 overrides"
msgstr[0] "%1 무시"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:247
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:262
msgctxt "@action:label"
msgid "Derivative from"
msgstr "Derivative from"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:252
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:267
msgctxt "@action:label"
msgid "%1, %2 override"
msgid_plural "%1, %2 overrides"
msgstr[0] "%1, %2 무시"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:268
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:283
msgctxt "@action:label"
msgid "Material settings"
msgstr "재료 설정"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:284
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:299
msgctxt "@info:tooltip"
msgid "How should the conflict in the material be resolved?"
msgstr "재료의 충돌은 어떻게 해결되어야합니까?"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:342
msgctxt "@action:label"
msgid "Setting visibility"
msgstr "표시 설정"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:336
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:351
msgctxt "@action:label"
msgid "Mode"
msgstr "종류"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:367
msgctxt "@action:label"
msgid "Visible settings:"
msgstr "표시 설정 :"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:372
msgctxt "@action:label"
msgid "%1 out of %2"
msgstr "1 out of %2"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:383
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:398
msgctxt "@action:warning"
msgid "Loading a project will clear all models on the build plate."
msgstr "프로젝트를 로드하면 빌드 플레이트의 모든 모델이 지워집니다."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:401
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:416
msgctxt "@action:button"
msgid "Open"
msgstr "열기"
@@ -2709,54 +2740,6 @@ msgctxt "@checkbox:description"
msgid "Automatically create a backup each day that Cura is started."
msgstr "Cura가 시작되는 날마다 자동으로 백업을 생성하십시오."
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMainSettingsSelector.qml:75
-msgctxt "@label"
-msgid "Not supported"
-msgstr "지원되지 않음"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:35
-msgctxt "@action:button"
-msgid "Previous"
-msgstr "이전"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:174
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:159
-msgctxt "@action:button"
-msgid "Export"
-msgstr "내보내기"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209
-msgctxt "@label"
-msgid "Tip"
-msgstr "팁"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMaterialMenu.qml:20
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66
-msgctxt "@label:category menu label"
-msgid "Generic"
-msgstr "일반"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:160
-msgctxt "@label"
-msgid "Print experiment"
-msgstr "인쇄 실험"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:25
-msgctxt "@label"
-msgid "Checklist"
-msgstr "체크리스트"
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:30
-msgctxt "@label"
-msgid "Please select any upgrades made to this Ultimaker 2."
-msgstr "이 Ultimaker 2 업그레이드를 선택하십시오."
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:44
-msgctxt "@label"
-msgid "Olsson Block"
-msgstr "Olsson Block"
-
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:30
msgctxt "@title"
msgid "Build Plate Leveling"
@@ -2842,170 +2825,176 @@ msgctxt "@label"
msgid "Are you sure you want to abort the print?"
msgstr "프린팅를 중단 하시겠습니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:72
msgctxt "@title"
msgid "Information"
msgstr "정보"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
msgctxt "@title:window"
msgid "Confirm Diameter Change"
msgstr "직경 변경 확인"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:102
msgctxt "@label (%1 is a number)"
msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?"
msgstr "새 필라멘트의 직경은 %1 mm로 설정되었으며, 현재 압출기와 호환되지 않습니다. 계속하시겠습니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:128
msgctxt "@label"
msgid "Display Name"
msgstr "표시 이름"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:138
msgctxt "@label"
msgid "Brand"
msgstr "상표"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:148
msgctxt "@label"
msgid "Material Type"
msgstr "재료 유형"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:158
msgctxt "@label"
msgid "Color"
msgstr "색깔"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:208
msgctxt "@label"
msgid "Properties"
msgstr "속성"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:210
msgctxt "@label"
msgid "Density"
msgstr "밀도"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:225
msgctxt "@label"
msgid "Diameter"
msgstr "직경"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:259
msgctxt "@label"
msgid "Filament Cost"
msgstr "필라멘트 비용"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:276
msgctxt "@label"
msgid "Filament weight"
msgstr "필라멘트 무게"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:294
msgctxt "@label"
msgid "Filament length"
msgstr "필라멘트 길이"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:303
msgctxt "@label"
msgid "Cost per Meter"
msgstr "미터 당 비용"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:317
msgctxt "@label"
msgid "This material is linked to %1 and shares some of its properties."
msgstr "이 재료는 %1에 연결되어 있으며 일부 속성을 공유합니다."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:324
msgctxt "@label"
msgid "Unlink Material"
msgstr "재료 연결 해제"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:335
msgctxt "@label"
msgid "Description"
msgstr "설명"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:348
msgctxt "@label"
msgid "Adhesion Information"
msgstr "접착 정보"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:374
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19
msgctxt "@label"
msgid "Print settings"
msgstr "프린팅 설정"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:108
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:84
msgctxt "@action:button"
msgid "Activate"
msgstr "활성화"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:126
msgctxt "@action:button"
msgid "Create"
msgstr "생성"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:140
msgctxt "@action:button"
msgid "Duplicate"
msgstr "복제"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:170
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:167
msgctxt "@action:button"
msgid "Import"
msgstr "가져오기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:184
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:179
+msgctxt "@action:button"
+msgid "Export"
+msgstr "내보내기"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:233
msgctxt "@action:label"
msgid "Printer"
msgstr "프린터"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:297
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:274
msgctxt "@title:window"
msgid "Confirm Remove"
msgstr "제거 확인"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:275
msgctxt "@label (%1 is object name)"
msgid "Are you sure you wish to remove %1? This cannot be undone!"
msgstr "%1을 제거 하시겠습니까? 이것은 취소 할 수 없습니다!"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:322
msgctxt "@title:window"
msgid "Import Material"
msgstr "재료 가져 오기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:323
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Could not import material %1: %2"
msgstr "재료를 가져올 수 없습니다"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:327
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully imported material %1"
msgstr "재료를 성공적으로 가져왔습니다"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
msgctxt "@title:window"
msgid "Export Material"
msgstr "재료 내보내기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:357
msgctxt "@info:status Don't translate the XML tags and !"
msgid "Failed to export material to %1: %2"
msgstr "재료를 내보내는데 실패했습니다"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:363
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully exported material to %1"
msgstr "재료를 성공적으로 내보냈습니다"
@@ -3020,27 +3009,27 @@ msgctxt "@label:textbox"
msgid "Check all"
msgstr "모두 확인"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:48
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
msgctxt "@info:status"
msgid "Calculated"
msgstr "계산된"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
msgctxt "@title:column"
msgid "Setting"
msgstr "설정"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:68
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:82
msgctxt "@title:column"
msgid "Profile"
msgstr "프로파일"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:89
msgctxt "@title:column"
msgid "Current"
msgstr "현재 설정"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:83
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:97
msgctxt "@title:column"
msgid "Unit"
msgstr "단위"
@@ -3051,307 +3040,301 @@ msgctxt "@title:tab"
msgid "General"
msgstr "일반"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:132
msgctxt "@label"
msgid "Interface"
msgstr "인터페이스"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:143
msgctxt "@label"
msgid "Language:"
msgstr "언어:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:210
msgctxt "@label"
msgid "Currency:"
msgstr "통화:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:223
msgctxt "@label"
msgid "Theme:"
msgstr "테마:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:279
msgctxt "@label"
msgid "You will need to restart the application for these changes to have effect."
msgstr "이러한 변경 사항을 적용하려면 응용 프로그램을 다시 시작해야합니다."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:296
msgctxt "@info:tooltip"
msgid "Slice automatically when changing settings."
msgstr "설정이 변경되면 자동으로 슬라이싱 합니다."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:304
msgctxt "@option:check"
msgid "Slice automatically"
msgstr "자동으로 슬라이싱"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:318
msgctxt "@label"
msgid "Viewport behavior"
msgstr "뷰포트 동작"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:326
msgctxt "@info:tooltip"
msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly."
msgstr "지원되지 않는 모델 영역을 빨간색으로 강조 표시하십시오. 서포트가 없으면 이 영역이 제대로 프린팅되지 않습니다."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:335
msgctxt "@option:check"
msgid "Display overhang"
msgstr "오버행 표시"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:343
msgctxt "@info:tooltip"
msgid "Moves the camera so the model is in the center of the view when a model is selected"
msgstr "모델을 선택하면 모델이 뷰의 가운데에 오도록 카메라를 이동합니다"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348
msgctxt "@action:button"
msgid "Center camera when item is selected"
msgstr "항목을 선택하면 카메라를 중앙에 위치"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:358
msgctxt "@info:tooltip"
msgid "Should the default zoom behavior of cura be inverted?"
msgstr "큐라의 기본 확대 동작을 반전시켜야 합니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:363
msgctxt "@action:button"
msgid "Invert the direction of camera zoom."
msgstr "카메라 줌의 방향을 반전시키기."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Should zooming move in the direction of the mouse?"
msgstr "확대가 마우스 방향으로 이동해야 합니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Zooming towards the mouse is not supported in the orthographic perspective."
msgstr "정투영법 시점에서는 마우스 방향으로 확대가 지원되지 않습니다."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384
msgctxt "@action:button"
msgid "Zoom toward mouse direction"
msgstr "마우스 방향으로 확대"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:410
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved so that they no longer intersect?"
msgstr "모델을 더 이상 교차시키지 않도록 이동해야합니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415
msgctxt "@option:check"
msgid "Ensure models are kept apart"
msgstr "모델이 분리되어 있는지 확인"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:424
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved down to touch the build plate?"
msgstr "모델을 빌드 플레이트에 닿도록 아래로 움직여야합니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:429
msgctxt "@option:check"
msgid "Automatically drop models to the build plate"
msgstr "모델을 빌드 플레이트에 자동으로 놓기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441
msgctxt "@info:tooltip"
msgid "Show caution message in g-code reader."
msgstr "g-code 리더에 주의 메시지를 표시하기."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
msgctxt "@option:check"
msgid "Caution message in g-code reader"
msgstr "g-code 리더의 주의 메시지"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:458
msgctxt "@info:tooltip"
msgid "Should layer be forced into compatibility mode?"
msgstr "레이어가 호환 모드로 강제 설정되어야합니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:463
msgctxt "@option:check"
msgid "Force layer view compatibility mode (restart required)"
msgstr "레이어 뷰 호환성 모드로 전환 (다시 시작해야 함)"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:473
+msgctxt "@info:tooltip"
+msgid "Should Cura open at the location it was closed?"
+msgstr "닫힌 위치에서 Cura를 열어야 합니까?"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:478
+msgctxt "@option:check"
+msgid "Restore window position on start"
+msgstr "시작 시 창 위치 복원"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:488
msgctxt "@info:tooltip"
msgid "What type of camera rendering should be used?"
msgstr "어떤 유형의 카메라 렌더링을 사용해야 합니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495
msgctxt "@window:text"
-msgid "Camera rendering: "
-msgstr "카메라 렌더링: "
+msgid "Camera rendering:"
+msgstr "카메라 렌더링:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506
msgid "Perspective"
msgstr "원근"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507
msgid "Orthographic"
msgstr "정투영"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538
msgctxt "@label"
msgid "Opening and saving files"
msgstr "파일 열기 및 저장"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:545
msgctxt "@info:tooltip"
msgid "Should models be scaled to the build volume if they are too large?"
msgstr "크기가 너무 큰 경우 모델을 빌드 볼륨에 맞게 조정해야합니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:550
msgctxt "@option:check"
msgid "Scale large models"
msgstr "큰 모델의 사이즈 수정"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:560
msgctxt "@info:tooltip"
msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?"
msgstr "단위가 밀리미터가 아닌 미터 단위 인 경우 모델이 매우 작게 나타날 수 있습니다. 이 모델을 확대할까요?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:565
msgctxt "@option:check"
msgid "Scale extremely small models"
msgstr "매우 작은 모델의 크기 조정"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575
msgctxt "@info:tooltip"
msgid "Should models be selected after they are loaded?"
msgstr "모델을 로드한 후에 선택해야 합니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:580
msgctxt "@option:check"
msgid "Select models when loaded"
msgstr "로드된 경우 모델 선택"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590
msgctxt "@info:tooltip"
msgid "Should a prefix based on the printer name be added to the print job name automatically?"
msgstr "프린터 이름에 기반한 접두어가 프린팅 작업 이름에 자동으로 추가되어야합니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:595
msgctxt "@option:check"
msgid "Add machine prefix to job name"
msgstr "작업 이름에 기기 접두어 추가"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:605
msgctxt "@info:tooltip"
msgid "Should a summary be shown when saving a project file?"
msgstr "프로젝트 파일을 저장할 때 요약이 표시되어야합니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609
msgctxt "@option:check"
msgid "Show summary dialog when saving project"
msgstr "프로젝트 저장시 요약 대화 상자 표시"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
msgctxt "@info:tooltip"
msgid "Default behavior when opening a project file"
msgstr "프로젝트 파일을 열 때 기본 동작"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:627
msgctxt "@window:text"
msgid "Default behavior when opening a project file: "
msgstr "프로젝트 파일을 열 때 기본 동작 "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641
msgctxt "@option:openProject"
msgid "Always ask me this"
msgstr "항상 묻기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:642
msgctxt "@option:openProject"
msgid "Always open as a project"
msgstr "항상 프로젝트로 열기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:643
msgctxt "@option:openProject"
msgid "Always import models"
msgstr "항상 모델 가져 오기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:679
msgctxt "@info:tooltip"
msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again."
msgstr "프로파일을 변경하고 다른 프로파일로 전환하면 수정 사항을 유지할지 여부를 묻는 대화 상자가 표시됩니다. 기본 행동을 선택하면 해당 대화 상자를 다시 표시 하지 않을 수 있습니다."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:52
msgctxt "@label"
msgid "Profiles"
msgstr "프로파일"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:693
msgctxt "@window:text"
msgid "Default behavior for changed setting values when switching to a different profile: "
msgstr "다른 프로파일로 변경하는 경우 변경된 설정값에 대한 기본 동작 "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:707
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157
msgctxt "@option:discardOrKeep"
msgid "Always ask me this"
msgstr "항상 묻기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708
msgctxt "@option:discardOrKeep"
msgid "Always discard changed settings"
msgstr "항상 변경된 설정 삭제"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:709
msgctxt "@option:discardOrKeep"
msgid "Always transfer changed settings to new profile"
msgstr "항상 변경된 설정을 새 프로파일로 전송"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743
msgctxt "@label"
msgid "Privacy"
msgstr "보안"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:750
msgctxt "@info:tooltip"
msgid "Should Cura check for updates when the program is started?"
msgstr "Cura가 프로그램이 시작될 때 업데이트를 확인할까요?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:755
msgctxt "@option:check"
msgid "Check for updates on start"
msgstr "시작시 업데이트 확인"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:765
msgctxt "@info:tooltip"
msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored."
msgstr "프린터에 대한 익명의 데이터를 Ultimaker로 보낼까요? 모델, IP 주소 또는 기타 개인 식별 정보는 전송되거나 저장되지 않습니다."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:770
msgctxt "@option:check"
msgid "Send (anonymous) print information"
msgstr "(익명) 프린터 정보 보내기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:779
msgctxt "@action:button"
msgid "More information"
msgstr "추가 정보"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:774
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:27
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ProfileMenu.qml:23
-msgctxt "@label"
-msgid "Experimental"
-msgstr "실험적 설정"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781
-msgctxt "@info:tooltip"
-msgid "Use multi build plate functionality"
-msgstr "다수의 빌드 플레이트 사용하기"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786
-msgctxt "@option:check"
-msgid "Use multi build plate functionality (restart required)"
-msgstr "다수의 빌드 플레이트 사용하기(다시 시작해야 합니다)"
-
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415
msgctxt "@title:tab"
@@ -3359,93 +3342,84 @@ msgid "Printers"
msgstr "프린터"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152
msgctxt "@action:button"
msgid "Rename"
msgstr "이름 바꾸기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:34
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419
msgctxt "@title:tab"
msgid "Profiles"
msgstr "프로파일"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:104
msgctxt "@label"
msgid "Create"
msgstr "생성"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
msgctxt "@label"
msgid "Duplicate"
msgstr "복제"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:202
msgctxt "@title:window"
msgid "Create Profile"
msgstr "프로파일 생성하기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:204
msgctxt "@info"
msgid "Please provide a name for this profile."
msgstr "이 프로파일에 대한 이름을 제공하십시오."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:260
msgctxt "@title:window"
msgid "Duplicate Profile"
msgstr "프로파일 복제하기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:291
msgctxt "@title:window"
msgid "Rename Profile"
msgstr "프로파일 이름 바꾸기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:304
msgctxt "@title:window"
msgid "Import Profile"
msgstr "프로파일 가져 오기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:333
msgctxt "@title:window"
msgid "Export Profile"
msgstr "프로파일 내보내기"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:396
msgctxt "@label %1 is printer name"
msgid "Printer: %1"
msgstr "프린터: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Default profiles"
-msgstr "기본 프로파일"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Custom profiles"
-msgstr "사용자 정의 프로파일"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:554
msgctxt "@action:button"
msgid "Update profile with current settings/overrides"
msgstr "현재 설정 / 재정의 프로파일 업데이트"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:561
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:257
msgctxt "@action:button"
msgid "Discard current changes"
msgstr "현재 변경 사항 삭제"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:580
msgctxt "@action:label"
msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below."
msgstr "이 프로파일은 프린터에서 지정한 기본값을 사용하므로 아래 목록에 아무런 설정/재정의가 없습니다."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:588
msgctxt "@action:label"
msgid "Your current settings match the selected profile."
msgstr "현재 설정이 선택한 프로파일과 일치합니다."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:606
msgctxt "@title:tab"
msgid "Global Settings"
msgstr "전역 설정"
@@ -3510,35 +3484,35 @@ msgstr "제목 없음"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:68
msgctxt "@label:textbox"
-msgid "search settings"
+msgid "Search settings"
msgstr "검색 설정"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:462
msgctxt "@action:menu"
msgid "Copy value to all extruders"
msgstr "모든 익스트루더에 값 복사"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:471
msgctxt "@action:menu"
msgid "Copy all changed values to all extruders"
msgstr "변경된 사항을 모든 익스트루더에 복사"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:508
msgctxt "@action:menu"
msgid "Hide this setting"
msgstr "이 설정 숨기기"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:521
msgctxt "@action:menu"
msgid "Don't show this setting"
msgstr "이 설정을 표시하지 않음"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
msgctxt "@action:menu"
msgid "Keep this setting visible"
msgstr "이 설정을 계속 표시하십시오"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434
msgctxt "@action:menu"
msgid "Configure setting visibility..."
@@ -3570,17 +3544,17 @@ msgctxt "@label Header for list of settings."
msgid "Affected By"
msgstr "영향을 받다"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:187
msgctxt "@label"
msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders."
msgstr "이 설정은 항상 모든 익스트루더 사이에 공유됩니다. 여기서 변경하면 모든 익스트루더에 대한 값이 변경됩니다."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:191
msgctxt "@label"
msgid "The value is resolved from per-extruder values "
msgstr "이 값은 익스트루더마다 결정됩니다 "
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:230
msgctxt "@label"
msgid ""
"This setting has a value that is different from the profile.\n"
@@ -3591,7 +3565,7 @@ msgstr ""
"\n"
"프로파일 값을 복원하려면 클릭하십시오."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:329
msgctxt "@label"
msgid ""
"This setting is normally calculated, but it currently has an absolute value set.\n"
@@ -3602,6 +3576,12 @@ msgstr ""
"\n"
"계산 된 값을 복원하려면 클릭하십시오."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/NoIntentIcon.qml:31
+msgctxt "@label %1 is filled in with the type of a profile. %2 is filled with a list of numbers (eg '1' or '1, 2')"
+msgid "There is no %1 profile for the configuration in extruder %2. The default intent will be used instead"
+msgid_plural "There is no %1 profile for the configurations in extruders %2. The default intent will be used instead"
+msgstr[0] ""
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:144
msgctxt "@button"
msgid "Recommended"
@@ -3642,26 +3622,11 @@ msgctxt "@label"
msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards."
msgstr "브림이나 라프트를 사용합니다. 이렇게하면 출력물 주변이나 아래에 평평한 영역이 추가되어 나중에 쉽게 자를 수 있습니다."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:175
-msgctxt "@label"
-msgid "Layer Height"
-msgstr "레이어 높이"
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:206
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:81
msgctxt "@tooltip"
msgid "You have modified some profile settings. If you want to change these go to custom mode."
msgstr "일부 프로파일 설정을 수정했습니다. 이러한 설정을 변경하려면 사용자 지정 모드로 이동하십시오."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:355
-msgctxt "@tooltip"
-msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
-msgstr "현재 재료 및 노즐 구성에 대해 이 품질 프로파일을 사용할 수 없습니다. 이 품질 프로파일을 활성화하려면 이를 변경하십시오."
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449
-msgctxt "@tooltip"
-msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
-msgstr "사용자 지정 프로파일이 현재 활성 상태입니다. 품질 슬라이더를 실행하려면 사용자 지정 탭에서 기본 품질 프로파일을 선택하십시오"
-
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:13
msgctxt "@label:Should be short"
msgid "On"
@@ -3672,12 +3637,17 @@ msgctxt "@label:Should be short"
msgid "Off"
msgstr "비활성"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:27
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:33
+msgctxt "@label"
+msgid "Experimental"
+msgstr "실험적 설정"
+
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:47
msgctxt "@label"
msgid "Profile"
msgstr "프로파일"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:94
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:172
msgctxt "@tooltip"
msgid ""
"Some setting/override values are different from the values stored in the profile.\n"
@@ -3688,6 +3658,11 @@ msgstr ""
"\n"
"프로파일 매니저를 열려면 클릭하십시오."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:160
+msgctxt "@label:header"
+msgid "Custom profiles"
+msgstr "사용자 정의 프로파일"
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:21
msgctxt "@label shown when we load a Gcode file"
msgid "Print setup disabled. G-code file can not be modified."
@@ -3815,11 +3790,16 @@ msgctxt "@label:category menu label"
msgid "Material"
msgstr "재료"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:42
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:46
msgctxt "@label:category menu label"
msgid "Favorites"
msgstr "즐겨찾기"
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:71
+msgctxt "@label:category menu label"
+msgid "Generic"
+msgstr "일반"
+
#: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25
msgctxt "@label:category menu label"
msgid "Network enabled printers"
@@ -3855,16 +3835,6 @@ msgctxt "@action:inmenu"
msgid "Disable Extruder"
msgstr "익스트루더 사용하지 않음"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63
-msgctxt "@title:menu"
-msgid "&Build plate"
-msgstr "빌드 플레이트(&B)"
-
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66
-msgctxt "@title:settings"
-msgid "&Profile"
-msgstr "프로파일(&P)"
-
#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:19
msgctxt "@action:inmenu menubar:view"
msgid "&Camera position"
@@ -3942,12 +3912,12 @@ msgctxt "@header"
msgid "Configurations"
msgstr "구성"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:110
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:112
msgctxt "@label"
msgid "Select configuration"
msgstr "구성 선택"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:223
msgctxt "@label"
msgid "Configurations"
msgstr "구성"
@@ -3977,12 +3947,12 @@ msgctxt "@label"
msgid "Enabled"
msgstr "실행됨"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:251
msgctxt "@label"
msgid "Material"
msgstr "재료"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:375
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:378
msgctxt "@label"
msgid "Use glue for better adhesion with this material combination."
msgstr "더 나은 접착력을 위해 이 재료 조합과 함께 접착제를 사용하십시오.."
@@ -4396,44 +4366,44 @@ msgctxt "@title:tab"
msgid "Settings"
msgstr "설정"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538
msgctxt "@title:window"
msgid "Closing Cura"
msgstr "Cura 닫기"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551
msgctxt "@label"
msgid "Are you sure you want to exit Cura?"
msgstr "Cura를 정말로 종료하시겠습니까?"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:589
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19
msgctxt "@title:window"
msgid "Open file(s)"
msgstr "파일 열기"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:695
msgctxt "@window:title"
msgid "Install Package"
msgstr "패키지 설치"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:703
msgctxt "@title:window"
msgid "Open File(s)"
msgstr "파일 열기"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:706
msgctxt "@text:window"
msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one."
msgstr "선택한 파일 내에 하나 이상의 G-코드 파일이 있습니다. 한 번에 하나의 G-코드 파일 만 열 수 있습니다. G-코드 파일을 열려면 하나만 선택하십시오."
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:809
msgctxt "@title:window"
msgid "Add Printer"
msgstr "프린터 추가"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:817
msgctxt "@title:window"
msgid "What's New"
msgstr "새로운 기능"
@@ -4503,17 +4473,17 @@ msgctxt "@title:window"
msgid "About Cura"
msgstr "Cura 소개"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:56
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:57
msgctxt "@label"
msgid "version: %1"
msgstr "버전: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:72
msgctxt "@label"
msgid "End-to-end solution for fused filament 3D printing."
msgstr "3D 프린팅을 위한 엔드 투 엔트 솔루션."
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:84
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:85
msgctxt "@info:credit"
msgid ""
"Cura is developed by Ultimaker B.V. in cooperation with the community.\n"
@@ -4522,122 +4492,122 @@ msgstr ""
"Cura는 커뮤니티와 공동으로 Ultimaker B.V.에 의해 개발되었습니다.\n"
"Cura는 다음의 오픈 소스 프로젝트를 사용합니다:"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
msgctxt "@label"
msgid "Graphical user interface"
msgstr "그래픽 사용자 인터페이스"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
msgctxt "@label"
msgid "Application framework"
msgstr "애플리케이션 프레임 워크"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
msgctxt "@label"
msgid "G-code generator"
msgstr "GCode 생성기"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:138
msgctxt "@label"
msgid "Interprocess communication library"
msgstr "프로세스간 통신 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:139
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
msgctxt "@label"
msgid "Programming language"
msgstr "프로그래밍 언어"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
msgctxt "@label"
msgid "GUI framework"
msgstr "GUI 프레임 워크"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
msgctxt "@label"
msgid "GUI framework bindings"
msgstr "GUI 프레임 워크 바인딩"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
msgctxt "@label"
msgid "C/C++ Binding library"
msgstr "C/C ++ 바인딩 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
msgctxt "@label"
msgid "Data interchange format"
msgstr "데이터 교환 형식"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
msgctxt "@label"
msgid "Support library for scientific computing"
msgstr "과학 컴퓨팅을 위한 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
msgctxt "@label"
msgid "Support library for faster math"
msgstr "더 빠른 수학연산을 위한 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
msgctxt "@label"
msgid "Support library for handling STL files"
msgstr "STL 파일 처리를 위한 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
msgctxt "@label"
msgid "Support library for handling planar objects"
msgstr "평면 개체 처리를 위한 지원 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
msgctxt "@label"
msgid "Support library for handling triangular meshes"
msgstr "삼각형 메쉬 처리를 위한 지원 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
msgctxt "@label"
msgid "Support library for analysis of complex networks"
msgstr "복잡한 네트워크 분석을 위한 지원 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
msgctxt "@label"
msgid "Support library for handling 3MF files"
msgstr "3MF 파일 처리를 위한 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
msgctxt "@label"
msgid "Support library for file metadata and streaming"
msgstr "파일 메타데이터 및 스트리밍을 위한 지원 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
msgctxt "@label"
msgid "Serial communication library"
msgstr "직렬 통신 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
msgctxt "@label"
msgid "ZeroConf discovery library"
msgstr "ZeroConf discovery 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
msgctxt "@label"
msgid "Polygon clipping library"
msgstr "다각형 클리핑 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:156
msgctxt "@Label"
msgid "Python HTTP library"
msgstr "Python HTTP 라이브러리"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:157
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
msgctxt "@label"
msgid "Font"
msgstr "폰트"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
msgctxt "@label"
msgid "SVG icons"
msgstr "SVG 아이콘"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:160
msgctxt "@label"
msgid "Linux cross-distribution application deployment"
msgstr "Linux 교차 배포 응용 프로그램 배포"
@@ -4657,32 +4627,27 @@ msgctxt "@title:window"
msgid "Save Project"
msgstr "프로젝트 저장"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149
-msgctxt "@action:label"
-msgid "Build plate"
-msgstr "빌드 플레이트"
-
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:177
msgctxt "@action:label"
msgid "Extruder %1"
msgstr "%1익스트루더"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:192
msgctxt "@action:label"
msgid "%1 & material"
msgstr "%1 & 재료"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:194
msgctxt "@action:label"
msgid "Material"
msgstr "재료"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
msgctxt "@action:label"
msgid "Don't show project summary on save again"
msgstr "프로젝트 요약을 다시 저장하지 마십시오"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:302
msgctxt "@action:button"
msgid "Save"
msgstr "저장"
@@ -4858,12 +4823,12 @@ msgctxt "@label"
msgid "Troubleshooting"
msgstr "문제 해결"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:211
msgctxt "@label"
msgid "Printer name"
msgstr "프린터 이름"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:224
msgctxt "@text"
msgid "Please give your printer a name"
msgstr "프린터의 이름을 설정하십시오"
@@ -4920,6 +4885,31 @@ msgctxt "@button"
msgid "Get started"
msgstr "시작하기"
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:27
+msgctxt "@info:tooltip"
+msgid "3D View"
+msgstr "3D 보기"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:40
+msgctxt "@info:tooltip"
+msgid "Front View"
+msgstr "앞에서 보기"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:53
+msgctxt "@info:tooltip"
+msgid "Top View"
+msgstr "위에서 보기"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:66
+msgctxt "@info:tooltip"
+msgid "Left View"
+msgstr "왼쪽 보기"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:79
+msgctxt "@info:tooltip"
+msgid "Right View"
+msgstr "오른쪽 보기"
+
#: MachineSettingsAction/plugin.json
msgctxt "description"
msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)."
@@ -4980,16 +4970,6 @@ msgctxt "name"
msgid "Model Checker"
msgstr "모델 검사기"
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "description"
-msgid "Dump the contents of all settings to a HTML file."
-msgstr "모든 설정의 내용을 HTML 파일로 덤프하십시오."
-
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "name"
-msgid "God Mode"
-msgstr "God 모드"
-
#: FirmwareUpdater/plugin.json
msgctxt "description"
msgid "Provides a machine actions for updating firmware."
@@ -5000,16 +4980,6 @@ msgctxt "name"
msgid "Firmware Updater"
msgstr "펌웨어 업데이터"
-#: ProfileFlattener/plugin.json
-msgctxt "description"
-msgid "Create a flattened quality changes profile."
-msgstr "평평한 품질 변경 프로필을 만듭니다."
-
-#: ProfileFlattener/plugin.json
-msgctxt "name"
-msgid "Profile Flattener"
-msgstr "프로필 플래트너"
-
#: AMFReader/plugin.json
msgctxt "description"
msgid "Provides support for reading AMF files."
@@ -5210,6 +5180,16 @@ msgctxt "name"
msgid "Version Upgrade 3.3 to 3.4"
msgstr "버전 업그레이드 3.3에서 3.4"
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "description"
+msgid "Upgrades configurations from Cura 4.3 to Cura 4.4."
+msgstr "Cura 4.3에서 Cura 4.4로 구성을 업그레이드합니다."
+
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "name"
+msgid "Version Upgrade 4.3 to 4.4"
+msgstr "4.3에서 4.4로 버전 업그레이드"
+
#: VersionUpgrade/VersionUpgrade25to26/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 2.5 to Cura 2.6."
@@ -5410,16 +5390,6 @@ msgctxt "name"
msgid "Cura Profile Writer"
msgstr "Cura 프로파일 작성자"
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "description"
-msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
-msgstr "재료 제조사가 드롭 인 UI를 사용하여 새로운 재료와 품질 프로파일을 만들 수 있게 합니다."
-
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "name"
-msgid "Print Profile Assistant"
-msgstr "프린트 프로파일 어시스턴트"
-
#: 3MFWriter/plugin.json
msgctxt "description"
msgid "Provides support for writing 3MF files."
@@ -5460,6 +5430,158 @@ msgctxt "name"
msgid "Cura Profile Reader"
msgstr "Cura 프로파일 리더"
+#~ msgctxt "@item:inmenu"
+#~ msgid "Flatten active settings"
+#~ msgstr "활성 설정 병합"
+
+#~ msgctxt "@info:status"
+#~ msgid "Profile has been flattened & activated."
+#~ msgstr "프로파일이 병합되고 활성화되었습니다."
+
+#~ msgctxt "X3g Writer Plugin Description"
+#~ msgid "Writes X3g to files"
+#~ msgstr "파일에 X3g 쓰기"
+
+#~ msgctxt "X3g Writer File Description"
+#~ msgid "X3g File"
+#~ msgstr "X3g 파일"
+
+#~ msgctxt "X3G Writer File Description"
+#~ msgid "X3G File"
+#~ msgstr "X3G 파일"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Open Compressed Triangle Mesh"
+#~ msgstr ""
+
+#~ msgctxt "@item:inmenu"
+#~ msgid "Profile Assistant"
+#~ msgstr "프로파일 어시스턴트"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Profile Assistant"
+#~ msgstr "프로파일 어시스턴트"
+
+#~ msgctxt "@action:button"
+#~ msgid "Retry"
+#~ msgstr "재시도"
+
+#~ msgctxt "@label:table_header"
+#~ msgid "Print Core"
+#~ msgstr "프린트 코어"
+
+#~ msgctxt "@label"
+#~ msgid "Don't support overlap with other models"
+#~ msgstr "다른 모델과 오버랩되도록 지원하지 않음"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for overlap with other models"
+#~ msgstr "다른 모델과의 오버랩에 대한 설정 수정"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for infill of other models"
+#~ msgstr "다른 모델의 내부채움에 대한 설정 수정"
+
+#~ msgctxt "@action:ComboBox option"
+#~ msgid "Update existing"
+#~ msgstr "기존 업데이트"
+
+#~ msgctxt "@label"
+#~ msgid "Not supported"
+#~ msgstr "지원되지 않음"
+
+#~ msgctxt "@action:button"
+#~ msgid "Previous"
+#~ msgstr "이전"
+
+#~ msgctxt "@label"
+#~ msgid "Tip"
+#~ msgstr "팁"
+
+#~ msgctxt "@label"
+#~ msgid "Print experiment"
+#~ msgstr "인쇄 실험"
+
+#~ msgctxt "@label"
+#~ msgid "Checklist"
+#~ msgstr "체크리스트"
+
+#~ msgctxt "@label"
+#~ msgid "Please select any upgrades made to this Ultimaker 2."
+#~ msgstr "이 Ultimaker 2 업그레이드를 선택하십시오."
+
+#~ msgctxt "@label"
+#~ msgid "Olsson Block"
+#~ msgstr "Olsson Block"
+
+#~ msgctxt "@window:text"
+#~ msgid "Camera rendering: "
+#~ msgstr "카메라 렌더링: "
+
+#~ msgctxt "@info:tooltip"
+#~ msgid "Use multi build plate functionality"
+#~ msgstr "다수의 빌드 플레이트 사용하기"
+
+#~ msgctxt "@option:check"
+#~ msgid "Use multi build plate functionality (restart required)"
+#~ msgstr "다수의 빌드 플레이트 사용하기(다시 시작해야 합니다)"
+
+#~ msgctxt "@label"
+#~ msgid "Default profiles"
+#~ msgstr "기본 프로파일"
+
+#~ msgctxt "@label:textbox"
+#~ msgid "search settings"
+#~ msgstr "검색 설정"
+
+#~ msgctxt "@label"
+#~ msgid "Layer Height"
+#~ msgstr "레이어 높이"
+
+#~ msgctxt "@tooltip"
+#~ msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
+#~ msgstr "현재 재료 및 노즐 구성에 대해 이 품질 프로파일을 사용할 수 없습니다. 이 품질 프로파일을 활성화하려면 이를 변경하십시오."
+
+#~ msgctxt "@tooltip"
+#~ msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
+#~ msgstr "사용자 지정 프로파일이 현재 활성 상태입니다. 품질 슬라이더를 실행하려면 사용자 지정 탭에서 기본 품질 프로파일을 선택하십시오"
+
+#~ msgctxt "@title:menu"
+#~ msgid "&Build plate"
+#~ msgstr "빌드 플레이트(&B)"
+
+#~ msgctxt "@title:settings"
+#~ msgid "&Profile"
+#~ msgstr "프로파일(&P)"
+
+#~ msgctxt "@action:label"
+#~ msgid "Build plate"
+#~ msgstr "빌드 플레이트"
+
+#~ msgctxt "description"
+#~ msgid "Dump the contents of all settings to a HTML file."
+#~ msgstr "모든 설정의 내용을 HTML 파일로 덤프하십시오."
+
+#~ msgctxt "name"
+#~ msgid "God Mode"
+#~ msgstr "God 모드"
+
+#~ msgctxt "description"
+#~ msgid "Create a flattened quality changes profile."
+#~ msgstr "평평한 품질 변경 프로필을 만듭니다."
+
+#~ msgctxt "name"
+#~ msgid "Profile Flattener"
+#~ msgstr "프로필 플래트너"
+
+#~ msgctxt "description"
+#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
+#~ msgstr "재료 제조사가 드롭 인 UI를 사용하여 새로운 재료와 품질 프로파일을 만들 수 있게 합니다."
+
+#~ msgctxt "name"
+#~ msgid "Print Profile Assistant"
+#~ msgstr "프린트 프로파일 어시스턴트"
+
#~ msgctxt "@info:status"
#~ msgid "Connected over the network."
#~ msgstr "네트워크를 통해 연결됨."
diff --git a/resources/i18n/ko_KR/fdmextruder.def.json.po b/resources/i18n/ko_KR/fdmextruder.def.json.po
index 3f3a8596d1..944cbf0e15 100644
--- a/resources/i18n/ko_KR/fdmextruder.def.json.po
+++ b/resources/i18n/ko_KR/fdmextruder.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-03-13 14:00+0200\n"
"Last-Translator: Korean \n"
"Language-Team: Jinbum Kim , Korean \n"
diff --git a/resources/i18n/ko_KR/fdmprinter.def.json.po b/resources/i18n/ko_KR/fdmprinter.def.json.po
index fed3ac8f5a..4aa764bcce 100644
--- a/resources/i18n/ko_KR/fdmprinter.def.json.po
+++ b/resources/i18n/ko_KR/fdmprinter.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-07-29 15:51+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: Korean , Jinbum Kim , Korean \n"
@@ -1031,6 +1031,16 @@ msgctxt "bottom_layers description"
msgid "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number."
msgstr "아래층의 수. 바닥 두께로 계산을 할때 이 값은 벽 두께로 계산할 때 이 값은 반올림됩니다."
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers label"
+msgid "Initial Bottom Layers"
+msgstr "초기 하단 레이어"
+
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers description"
+msgid "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number."
+msgstr "빌드 플레이트에서 위를 향하는 초기 하단 레이어 수. 하단 두께로 계산할 경우, 이 값이 전체 값으로 반올림됩니다."
+
#: fdmprinter.def.json
msgctxt "top_bottom_pattern label"
msgid "Top/Bottom Pattern"
@@ -3982,8 +3992,8 @@ msgstr "최소 서포트 인터페이스 지역"
#: fdmprinter.def.json
msgctxt "minimum_interface_area description"
-msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
-msgstr "지원 인터페이스 영역에 대한 최소 지역 크기. 이 값보다 작은 지역을 갖는 영역은 생성되지 않습니다."
+msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "지원 인터페이스 다각형의 최소 영역 크기입니다. 이 값보다 작은 영역을 갖는 다각형은 정상적인 지원으로 인쇄됩니다."
#: fdmprinter.def.json
msgctxt "minimum_roof_area label"
@@ -3992,8 +4002,8 @@ msgstr "최소 서포트 지붕 지역"
#: fdmprinter.def.json
msgctxt "minimum_roof_area description"
-msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "서포트 지붕에 대한 최소 지역 크기. 이 값보다 작은 지역을 갖는 영역은 생성되지 않습니다."
+msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "서포트 지붕에 대한 최소 면적 크기입니다. 이 값보다 작은 영역을 갖는 다각형은 정상적인 지원으로 인쇄됩니다."
#: fdmprinter.def.json
msgctxt "minimum_bottom_area label"
@@ -4002,8 +4012,8 @@ msgstr "최소 서포트 바닥 지역"
#: fdmprinter.def.json
msgctxt "minimum_bottom_area description"
-msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "서포트 바닥에 대한 최소 지역 크기. 이 값보다 작은 지역을 갖는 영역은 생성되지 않습니다."
+msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "지원 바닥의 최소 면적 크기입니다. 이 값보다 작은 영역을 갖는 다각형은 정상적인 지원으로 인쇄됩니다."
#: fdmprinter.def.json
msgctxt "support_interface_offset label"
@@ -4043,8 +4053,7 @@ msgstr "서포트 인터페이스 선 방향"
#: fdmprinter.def.json
msgctxt "support_interface_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "사용할 정수 선 방향 리스트입니다. 리스트의 요소는 레이어가 진행됨에 따라 순차적으로 사용되며 리스트의 끝에 도달하면 처음부터 다시 시작됩니다. 리스트 항목은 쉼표로 구분되며 전체 리스트는 대괄호 안에 들어 있습니다. 기본값은 빈 목록입니다. 즉 기본 각도인 0도를 사용합니다(인터페이스가"
-" 상당히 두껍거나 90도라면 45도와 135도를 번갈아 사용)."
+msgstr "사용할 정수 선 방향 리스트입니다. 리스트의 요소는 레이어가 진행됨에 따라 순차적으로 사용되며 리스트의 끝에 도달하면 처음부터 다시 시작됩니다. 리스트 항목은 쉼표로 구분되며 전체 리스트는 대괄호 안에 들어 있습니다. 기본값은 빈 목록입니다. 즉 기본 각도인 0도를 사용합니다(인터페이스가 상당히 두껍거나 90도라면 45도와 135도를 번갈아 사용)."
#: fdmprinter.def.json
msgctxt "support_roof_angles label"
@@ -4054,8 +4063,7 @@ msgstr "서포트 지붕 선 방향"
#: fdmprinter.def.json
msgctxt "support_roof_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "사용할 정수 선 방향 리스트입니다. 리스트의 요소는 레이어가 진행됨에 따라 순차적으로 사용되며 리스트의 끝에 도달하면 처음부터 다시 시작됩니다. 리스트 항목은 쉼표로 구분되며 전체 리스트는 대괄호 안에 들어 있습니다. 기본값은 빈 목록입니다. 즉 기본 각도인 0도를 사용합니다(인터페이스가"
-" 상당히 두껍거나 90도라면 45도와 135도를 번갈아 사용)."
+msgstr "사용할 정수 선 방향 리스트입니다. 리스트의 요소는 레이어가 진행됨에 따라 순차적으로 사용되며 리스트의 끝에 도달하면 처음부터 다시 시작됩니다. 리스트 항목은 쉼표로 구분되며 전체 리스트는 대괄호 안에 들어 있습니다. 기본값은 빈 목록입니다. 즉 기본 각도인 0도를 사용합니다(인터페이스가 상당히 두껍거나 90도라면 45도와 135도를 번갈아 사용)."
#: fdmprinter.def.json
msgctxt "support_bottom_angles label"
@@ -4065,8 +4073,7 @@ msgstr "바닥 지붕 선 방향"
#: fdmprinter.def.json
msgctxt "support_bottom_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "사용할 정수 선 방향 리스트입니다. 리스트의 요소는 레이어가 진행됨에 따라 순차적으로 사용되며 리스트의 끝에 도달하면 처음부터 다시 시작됩니다. 리스트 항목은 쉼표로 구분되며 전체 리스트는 대괄호 안에 들어 있습니다. 기본값은 빈 목록입니다. 즉 기본 각도인 0도를 사용합니다(인터페이스가"
-" 상당히 두껍거나 90도라면 45도와 135도를 번갈아 사용)."
+msgstr "사용할 정수 선 방향 리스트입니다. 리스트의 요소는 레이어가 진행됨에 따라 순차적으로 사용되며 리스트의 끝에 도달하면 처음부터 다시 시작됩니다. 리스트 항목은 쉼표로 구분되며 전체 리스트는 대괄호 안에 들어 있습니다. 기본값은 빈 목록입니다. 즉 기본 각도인 0도를 사용합니다(인터페이스가 상당히 두껍거나 90도라면 45도와 135도를 번갈아 사용)."
#: fdmprinter.def.json
msgctxt "support_fan_enable label"
@@ -4792,6 +4799,36 @@ msgctxt "remove_empty_first_layers description"
msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle."
msgstr "첫 번째로 프린팅된 레이어 바로 아래의 비어 있는 레이어를 제거합니다. 이 설정을 해제하면 슬라이싱 허용 오차 설정을 배타 또는 중간으로 설정할 경우 첫 번째 레이어가 비어 있게 될 수 있습니다."
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution label"
+msgid "Maximum Resolution"
+msgstr "최대 해상도"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution description"
+msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
+msgstr "슬라이딩 후의 선분의 최소 크기입니다. 이 값을 높이면 메쉬의 해상도가 낮아집니다. 그러면 프린터가 G 코드를 처리하는 데 필요한 속도를 유지할 수 있으며 처리할 수 없는 메쉬의 디테일이 제거되므로 슬라이드 속도가 높아집니다."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution label"
+msgid "Maximum Travel Resolution"
+msgstr "최대 이동 해상도"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution description"
+msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
+msgstr "슬라이딩 후의 이동 선분의 최소 크기입니다. 이 값을 높이면 코너에서 매끄럽게 이동하는 정도가 감소합니다. 프린터가 G 코드를 처리하는 데 필요한 속도를 유지할 수 있지만, 모델을 피하기 때문에 정확도가 감소합니다."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation label"
+msgid "Maximum Deviation"
+msgstr "최대 편차"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation description"
+msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
+msgstr "최대 해상도 설정에 대한 해상도를 낮추면 최대 편차를 사용할 수 있습니다. 최대 편차를 높이면 프린트의 정확도는 감소하지만, G 코드도 감소합니다. 최대 편차는 최대 해상도의 한계이며, 따라서 두 항목이 충돌하면 항상 최대 편차가 우선합니다."
+
#: fdmprinter.def.json
msgctxt "blackmagic label"
msgid "Special Modes"
@@ -5167,36 +5204,6 @@ msgctxt "minimum_polygon_circumference description"
msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details."
msgstr "레이어가 슬라이스 된, 이 값보다 둘레가 작은 다각형은 필터링됩니다. 값을 낮을수록 슬라이스가 느려지지만, 해상도 메쉬가 높아집니다. 주로 고해상도 SLA 프린터 및 세부 사항이 많은 매우 작은 3D 모델에 적합합니다."
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution label"
-msgid "Maximum Resolution"
-msgstr "최대 해상도"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution description"
-msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
-msgstr "슬라이딩 후의 선분의 최소 크기입니다. 이 값을 높이면 메쉬의 해상도가 낮아집니다. 그러면 프린터가 G 코드를 처리하는 데 필요한 속도를 유지할 수 있으며 처리할 수 없는 메쉬의 디테일이 제거되므로 슬라이드 속도가 높아집니다."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution label"
-msgid "Maximum Travel Resolution"
-msgstr "최대 이동 해상도"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution description"
-msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
-msgstr "슬라이딩 후의 이동 선분의 최소 크기입니다. 이 값을 높이면 코너에서 매끄럽게 이동하는 정도가 감소합니다. 프린터가 G 코드를 처리하는 데 필요한 속도를 유지할 수 있지만, 모델을 피하기 때문에 정확도가 감소합니다."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation label"
-msgid "Maximum Deviation"
-msgstr "최대 편차"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation description"
-msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
-msgstr "최대 해상도 설정에 대한 해상도를 낮추면 최대 편차를 사용할 수 있습니다. 최대 편차를 높이면 프린트의 정확도는 감소하지만, G 코드도 감소합니다. 최대 편차는 최대 해상도의 한계이며, 따라서 두 항목이 충돌하면 항상 최대 편차가 우선합니다."
-
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
msgid "Break Up Support In Chunks"
@@ -5337,16 +5344,6 @@ msgctxt "coasting_speed description"
msgid "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops."
msgstr "코스팅(Coasting)시 이동 속도. 압출 경로의 속도에 상대적입니다. 코스팅(Coasting) 이동 중에 보우 덴 튜브의 압력이 떨어지기 때문에 100% 보다 약간 작은 값을 권합니다."
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation label"
-msgid "Alternate Skin Rotation"
-msgstr "대체 스킨 회전"
-
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation description"
-msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
-msgstr "위쪽/아래쪽 레이어가 프린팅되는 방향을 바꿉니다. 보통 대각선으로 만 프린팅됩니다. 이 설정은 X 전용 및 Y 전용 방향을 추가합니다."
-
#: fdmprinter.def.json
msgctxt "cross_infill_pocket_size label"
msgid "Cross 3D Pocket Size"
@@ -5519,23 +5516,23 @@ msgstr "각 선분에 있는 임의의 점 사이의 평균 거리입니다. 다
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset label"
-msgid "Flow rate compensation max extrusion offset"
+msgid "Flow Rate Compensation Max Extrusion Offset"
msgstr "압출 속도 보상 최대 압출 오프셋"
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset description"
-msgid "The maximum distance in mm to compensate."
-msgstr "최대 보상 거리입니다(단위: mm)."
+msgid "The maximum distance in mm to move the filament to compensate for changes in flow rate."
+msgstr "압출 속도를 보상하기 위해 필라멘트를 이동하는 최대 거리(mm)."
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor label"
-msgid "Flow rate compensation factor"
+msgid "Flow Rate Compensation Factor"
msgstr "압출 속도 보상 배율"
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor description"
-msgid "The multiplication factor for the flow rate -> distance translation."
-msgstr "압출 속도를 거리로 변환하는 증배율입니다."
+msgid "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."
+msgstr "압출 속도 변화를 보상하기 위해 필라멘트를 이동하는 거리(1초 압출 시 필라멘트가 이동할 수 있는 거리의 백분율)."
#: fdmprinter.def.json
msgctxt "wireframe_enabled label"
@@ -5826,13 +5823,13 @@ msgstr "이전 높이와 비교되는 다음 레이어 높이의 차이."
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold label"
-msgid "Adaptive Layers Threshold"
-msgstr "어댑티브 레이어 임계 값"
+msgid "Adaptive Layers Topography Size"
+msgstr "어댑티브 레이어 지형 크기"
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold description"
-msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
-msgstr "더 작은 레이어를 사용할지 여부에 대한 임계 값. 이 숫자는 레이어의 가장 급한 경사의 탄젠트와 비교됩니다."
+msgid "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."
+msgstr "두 개의 인접 레이어 사이의 대상 수평 거리. 이러한 설정을 줄이면 레이어들의 가장자리를 더 가깝게 하도록 보다 얇은 레이어들을 사용하게 됩니다."
#: fdmprinter.def.json
msgctxt "wall_overhang_angle label"
@@ -5841,8 +5838,8 @@ msgstr "오버행된 벽 각도"
#: fdmprinter.def.json
msgctxt "wall_overhang_angle description"
-msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
-msgstr "이 각도를 초과해 오버행된 벽은 오버행된 벽 설정을 사용해 인쇄됩니다. 값이 90인 경우 벽이 오버행된 것으로 간주하지 않습니다."
+msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging. Overhang that gets supported by support will not be treated as overhang either."
+msgstr "이 각도보다 놓은 오버행(경사면)의 벽은 오버행 벽 설정을 사용해 인쇄됩니다. 값이 90이면 오버행(경사면)으로 처리되는 벽이 없습니다. 서포트로 지지되는 오버행(경사면)도 오버행(경사면)으로 처리되지 않습니다."
#: fdmprinter.def.json
msgctxt "wall_overhang_speed_factor label"
@@ -6221,18 +6218,18 @@ msgstr "소형 피처 속도"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor description"
-msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
-msgstr "소형 피처는 정상적인 프린트 속도의 이 비율로 프린팅됩니다. 프린트 속도가 느리면 착력과 정확도가 개선됩니다."
+msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
+msgstr "소형 피처는 정상적인 프린트 속도의 이 비율로 프린팅됩니다. 프린트 속도가 느리면 부착과 정확도가 개선됩니다."
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 label"
-msgid "First Layer Speed"
-msgstr "첫 번째 레이어 속도"
+msgid "Small Feature Initial Layer Speed"
+msgstr "소형 피처 초기 레이어 속도"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 description"
-msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
-msgstr "첫 번째 레이어의 소형 피처는 정상적인 프린트 속도의 이 비율로 프린팅됩니다. 프린트 속도가 느리면 접착력과 정확도가 개선됩니다."
+msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
+msgstr "첫 번째 레이어의 소형 피처는 정상적인 프린트 속도의 이 비율로 프린팅됩니다. 프린트 속도가 느리면 부착과 정확도가 개선됩니다."
#: fdmprinter.def.json
msgctxt "command_line_settings label"
@@ -6294,6 +6291,66 @@ msgctxt "mesh_rotation_matrix description"
msgid "Transformation matrix to be applied to the model when loading it from file."
msgstr "파일로부터 로드 하는 경유, 모델에 적용될 변환 행렬입니다."
+#~ msgctxt "minimum_interface_area description"
+#~ msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "지원 인터페이스 영역에 대한 최소 지역 크기. 이 값보다 작은 지역을 갖는 영역은 생성되지 않습니다."
+
+#~ msgctxt "minimum_roof_area description"
+#~ msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "서포트 지붕에 대한 최소 지역 크기. 이 값보다 작은 지역을 갖는 영역은 생성되지 않습니다."
+
+#~ msgctxt "minimum_bottom_area description"
+#~ msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "서포트 바닥에 대한 최소 지역 크기. 이 값보다 작은 지역을 갖는 영역은 생성되지 않습니다."
+
+#~ msgctxt "skin_alternate_rotation label"
+#~ msgid "Alternate Skin Rotation"
+#~ msgstr "대체 스킨 회전"
+
+#~ msgctxt "skin_alternate_rotation description"
+#~ msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
+#~ msgstr "위쪽/아래쪽 레이어가 프린팅되는 방향을 바꿉니다. 보통 대각선으로 만 프린팅됩니다. 이 설정은 X 전용 및 Y 전용 방향을 추가합니다."
+
+#~ msgctxt "flow_rate_max_extrusion_offset label"
+#~ msgid "Flow rate compensation max extrusion offset"
+#~ msgstr "압출 속도 보상 최대 압출 오프셋"
+
+#~ msgctxt "flow_rate_max_extrusion_offset description"
+#~ msgid "The maximum distance in mm to compensate."
+#~ msgstr "최대 보상 거리입니다(단위: mm)."
+
+#~ msgctxt "flow_rate_extrusion_offset_factor label"
+#~ msgid "Flow rate compensation factor"
+#~ msgstr "압출 속도 보상 배율"
+
+#~ msgctxt "flow_rate_extrusion_offset_factor description"
+#~ msgid "The multiplication factor for the flow rate -> distance translation."
+#~ msgstr "압출 속도를 거리로 변환하는 증배율입니다."
+
+#~ msgctxt "adaptive_layer_height_threshold label"
+#~ msgid "Adaptive Layers Threshold"
+#~ msgstr "어댑티브 레이어 임계 값"
+
+#~ msgctxt "adaptive_layer_height_threshold description"
+#~ msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
+#~ msgstr "더 작은 레이어를 사용할지 여부에 대한 임계 값. 이 숫자는 레이어의 가장 급한 경사의 탄젠트와 비교됩니다."
+
+#~ msgctxt "wall_overhang_angle description"
+#~ msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
+#~ msgstr "이 각도를 초과해 오버행된 벽은 오버행된 벽 설정을 사용해 인쇄됩니다. 값이 90인 경우 벽이 오버행된 것으로 간주하지 않습니다."
+
+#~ msgctxt "small_feature_speed_factor description"
+#~ msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "소형 피처는 정상적인 프린트 속도의 이 비율로 프린팅됩니다. 프린트 속도가 느리면 착력과 정확도가 개선됩니다."
+
+#~ msgctxt "small_feature_speed_factor_0 label"
+#~ msgid "First Layer Speed"
+#~ msgstr "첫 번째 레이어 속도"
+
+#~ msgctxt "small_feature_speed_factor_0 description"
+#~ msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "첫 번째 레이어의 소형 피처는 정상적인 프린트 속도의 이 비율로 프린팅됩니다. 프린트 속도가 느리면 접착력과 정확도가 개선됩니다."
+
#~ msgctxt "ironing_enabled description"
#~ msgid "Go over the top surface one additional time, but without extruding material. This is meant to melt the plastic on top further, creating a smoother surface."
#~ msgstr "상단 표면을 한 번 더 이동하지만 재료를 익스트루딩 시키지 않습니다. 이것은 맨 위의 플라스틱을 녹여 부드러운 표면을 만듭니다."
diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po
index d15742a101..2f9ffe5802 100644
--- a/resources/i18n/nl_NL/cura.po
+++ b/resources/i18n/nl_NL/cura.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0200\n"
+"POT-Creation-Date: 2019-11-05 13:13+0100\n"
"PO-Revision-Date: 2019-07-29 15:51+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: Dutch , Dutch \n"
@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.0.6\n"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:30
msgctxt "@action"
msgid "Machine Settings"
msgstr "Machine-instellingen"
@@ -40,13 +40,13 @@ msgctxt "@item:inlistbox"
msgid "G-code File"
msgstr "G-code-bestand"
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:66
msgctxt "@error:not supported"
msgid "GCodeWriter does not support non-text mode."
msgstr "GCodeWriter ondersteunt geen non-tekstmodus."
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:72
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:88
msgctxt "@warning:status"
msgid "Please prepare G-code before exporting."
msgstr "Bereid voorafgaand aan het exporteren G-code voor."
@@ -56,7 +56,7 @@ msgctxt "@info:title"
msgid "3D Model Assistant"
msgstr "3D-modelassistent"
-#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:90
+#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:92
#, python-brace-format
msgctxt "@info:status"
msgid ""
@@ -75,16 +75,6 @@ msgctxt "@action"
msgid "Update Firmware"
msgstr "Firmware bijwerken"
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23
-msgctxt "@item:inmenu"
-msgid "Flatten active settings"
-msgstr "Actieve instellingen platmaken"
-
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35
-msgctxt "@info:status"
-msgid "Profile has been flattened & activated."
-msgstr "Profiel is platgemaakt en geactiveerd."
-
#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "AMF File"
@@ -125,21 +115,6 @@ msgctxt "@message"
msgid "Print in Progress"
msgstr "Bezig met printen"
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
-msgctxt "X3g Writer Plugin Description"
-msgid "Writes X3g to files"
-msgstr "Schrijft X3g naar bestanden"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21
-msgctxt "X3g Writer File Description"
-msgid "X3g File"
-msgstr "X3g-bestand"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15
-msgctxt "X3G Writer File Description"
-msgid "X3G File"
-msgstr "X3G-bestand"
-
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17
#: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17
msgctxt "@item:inlistbox"
@@ -211,9 +186,9 @@ msgid "Could not save to removable drive {0}: {1}"
msgstr "Kan niet opslaan op verwisselbaar station {0}: {1}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1634
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:139
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:146
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1668
msgctxt "@info:title"
msgid "Error"
msgstr "Fout"
@@ -243,8 +218,8 @@ msgstr "Verwisselbaar station {0} uitwerpen"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1624
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1724
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1658
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1758
msgctxt "@info:title"
msgid "Warning"
msgstr "Waarschuwing"
@@ -276,17 +251,17 @@ msgctxt "@action"
msgid "Connect via Network"
msgstr "Verbinding Maken via Netwerk"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:57
msgctxt "@action:button Preceded by 'Ready to'."
msgid "Print over network"
msgstr "Printen via netwerk"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:58
msgctxt "@properties:tooltip"
msgid "Print over network"
msgstr "Printen via netwerk"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:59
msgctxt "@info:status"
msgid "Connected over the network"
msgstr "Via het netwerk verbonden"
@@ -301,6 +276,21 @@ msgctxt "@info:title"
msgid "Print error"
msgstr "Printfout"
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:21
+msgctxt "@info:title"
+msgid "New cloud printers found"
+msgstr "Nieuwe cloudprinters gevonden"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:22
+msgctxt "@info:message"
+msgid "New printers have been found connected to your account, you can find them in your list of discovered printers."
+msgstr "Er zijn nieuwe printers gedetecteerd die zijn verbonden met uw account. U kunt ze vinden in uw lijst met gedetecteerde printers."
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:27
+msgctxt "@info:option_text"
+msgid "Do not show this message again"
+msgstr "Dit bericht niet meer weergeven"
+
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
@@ -501,7 +491,7 @@ msgid "GIF Image"
msgstr "GIF-afbeelding"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
-msgctxt "@item:inlistbox"
+msgctxt "@item:inlistbox 'Open' is part of the name of this file format."
msgid "Open Compressed Triangle Mesh"
msgstr "Gecomprimeerde driehoeksnet openen"
@@ -594,12 +584,12 @@ msgctxt "@info:tooltip"
msgid "Configure Per Model Settings"
msgstr "Instellingen per Model configureren"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:186
msgctxt "@title:tab"
msgid "Recommended"
msgstr "Aanbevolen"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:188
msgctxt "@title:tab"
msgid "Custom"
msgstr "Aangepast"
@@ -610,19 +600,19 @@ msgctxt "@item:inlistbox"
msgid "3MF File"
msgstr "3MF-bestand"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:198
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:651
msgctxt "@label"
msgid "Nozzle"
msgstr "Nozzle"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:496
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead."
msgstr "Projectbestand {0} bevat een onbekend type machine {1}. Kan de machine niet importeren. In plaats daarvan worden er modellen geïmporteerd."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:499
msgctxt "@info:title"
msgid "Open Project File"
msgstr "Projectbestand Openen"
@@ -702,16 +692,6 @@ msgctxt "@item:inlistbox"
msgid "Cura Profile"
msgstr "Cura-profiel"
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12
-msgctxt "@item:inmenu"
-msgid "Profile Assistant"
-msgstr "Profielassistent"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:18
-msgctxt "@item:inlistbox"
-msgid "Profile Assistant"
-msgstr "Profielassistent"
-
#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26
msgctxt "@item:inlistbox"
msgid "3MF file"
@@ -732,7 +712,6 @@ msgctxt "@item:inmenu"
msgid "Preview"
msgstr "Voorbeeld"
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:19
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18
msgctxt "@action"
msgid "Select upgrades"
@@ -748,134 +727,148 @@ msgctxt "@info:title"
msgid "Login failed"
msgstr "Inloggen mislukt"
-#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:36
msgctxt "@info:not supported profile"
msgid "Not supported"
msgstr "Niet ondersteund"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:55
+msgctxt "@info:No intent profile selected"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:196
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:125
msgctxt "@title:window"
msgid "File Already Exists"
msgstr "Het Bestand Bestaat Al"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:197
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:126
#, python-brace-format
msgctxt "@label Don't translate the XML tag !"
msgid "The file {0} already exists. Are you sure you want to overwrite it?"
msgstr "Het bestand {0} bestaat al. Weet u zeker dat u dit bestand wilt overschrijven?"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:427
#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:430
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:433
msgctxt "@info:status"
msgid "Invalid file URL:"
msgstr "Ongeldige bestands-URL:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:780
msgctxt "@info:message Followed by a list of settings."
msgid "Settings have been changed to match the current availability of extruders:"
msgstr "De instellingen zijn gewijzigd zodat deze overeenkomen met de huidige beschikbaarheid van extruders:"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:782
msgctxt "@info:title"
msgid "Settings updated"
msgstr "De instellingen zijn bijgewerkt"
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1334
msgctxt "@info:title"
msgid "Extruder(s) Disabled"
msgstr "Extruder(s) uitgeschakeld"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1457
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:99
+#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
+#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+msgctxt "@label"
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Failed to export profile to {0}: {1}"
msgstr "Kan het profiel niet exporteren als {0}: {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to export profile to {0}: Writer plugin reported failure."
msgstr "Kan het profiel niet exporteren als {0}: Invoegtoepassing voor de schrijver heeft een fout gerapporteerd."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:149
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Exported profile to {0}"
msgstr "Het profiel is geëxporteerd als {0}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150
msgctxt "@info:title"
msgid "Export succeeded"
msgstr "De export is voltooid"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}: {1}"
msgstr "Kan het profiel niet importeren uit {0}: {1}"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:181
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Can't import profile from {0} before a printer is added."
msgstr "Kan het profiel niet importeren uit {0} voordat een printer toegevoegd is."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:198
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "No custom profile to import in file {0}"
msgstr "Er is geen aangepast profiel om in het bestand {0} te importeren"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:202
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "Failed to import profile from {0}:"
msgstr "Kan het profiel niet importeren uit {0}:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:226
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:236
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags !"
msgid "This profile {0} contains incorrect data, could not import it."
msgstr "Dit profiel {0} bevat incorrecte gegevens. Kan het profiel niet importeren."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:325
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag !"
msgid "Failed to import profile from {0}:"
msgstr "Kan het profiel niet importeren uit {0}:"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:328
#, python-brace-format
msgctxt "@info:status"
msgid "Successfully imported profile {0}"
msgstr "Het profiel {0} is geïmporteerd"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:331
#, python-brace-format
msgctxt "@info:status"
msgid "File {0} does not contain any valid profile."
msgstr "Het bestand {0} bevat geen geldig profiel."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:334
#, python-brace-format
msgctxt "@info:status"
msgid "Profile {0} has an unknown file type or is corrupted."
msgstr "Het profiel {0} heeft een onbekend bestandstype of is beschadigd."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369
msgctxt "@label"
msgid "Custom profile"
msgstr "Aangepast profiel"
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:385
msgctxt "@info:status"
msgid "Profile is missing a quality type."
msgstr "Er ontbreekt een kwaliteitstype in het profiel."
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:399
#, python-brace-format
msgctxt "@info:status"
msgid "Could not find a quality type {0} for the current configuration."
@@ -941,14 +934,13 @@ msgctxt "@tooltip"
msgid "Other"
msgstr "Overig(e)"
-#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:306
+#: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:302
#, python-brace-format
msgctxt "@label"
msgid "Pre-sliced file {0}"
msgstr "Vooraf geslicet bestand {0}"
#: /home/ruben/Projects/Cura/cura/UI/WelcomePagesModel.py:56
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:62
msgctxt "@action:button"
msgid "Next"
msgstr "Volgende"
@@ -962,9 +954,9 @@ msgstr "Groepsnummer {group_nr}"
#: /home/ruben/Projects/Cura/cura/UI/WhatsNewPagesModel.py:17
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:133
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:169
msgctxt "@action:button"
msgid "Close"
msgstr "Sluiten"
@@ -979,40 +971,85 @@ msgstr "Toevoegen"
#: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:18
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:19
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:81
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:352
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:42
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:58
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:149
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:406
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:294
msgctxt "@action:button"
msgid "Cancel"
msgstr "Annuleren"
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:36
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:320
+msgctxt "@label"
+msgid "Default"
+msgstr "Default"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:39
+msgctxt "@label"
+msgid "Visual"
+msgstr "Visueel"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:40
+msgctxt "@text"
+msgid "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality."
+msgstr "Het visuele profiel is ontworpen om visuele prototypen en modellen te printen met als doel een hoge visuele en oppervlaktekwaliteit te creëren."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:43
+msgctxt "@label"
+msgid "Engineering"
+msgstr "Engineering"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:44
+msgctxt "@text"
+msgid "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances."
+msgstr "Het engineeringprofiel is ontworpen om functionele prototypen en onderdelen voor eindgebruik te printen met als doel een grotere precisie en nauwere toleranties."
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:47
+msgctxt "@label"
+msgid "Draft"
+msgstr "Ontwerp"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/IntentCategoryModel.py:48
+msgctxt "@text"
+msgid "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction."
+msgstr "Het ontwerpprofiel is ontworpen om initiële prototypen en conceptvalidatie te printen met als doel de printtijd aanzienlijk te verkorten."
+
#: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208
msgctxt "@menuitem"
msgid "Not overridden"
msgstr "Niet overschreven"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:109
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:357
+msgctxt "@label"
+msgid "Custom profiles"
+msgstr "Aangepaste profielen"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:391
#, python-brace-format
msgctxt "@item:inlistbox"
msgid "All Supported Types ({0})"
msgstr "Alle Ondersteunde Typen ({0})"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:110
+#: /home/ruben/Projects/Cura/cura/Machines/Models/QualityManagementModel.py:392
msgctxt "@item:inlistbox"
msgid "All Files (*)"
msgstr "Alle Bestanden (*)"
-#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:86
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:182
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:223
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:213
msgctxt "@label"
-msgid "Unknown"
-msgstr "Onbekend"
+msgid "Custom Material"
+msgstr "Aangepast materiaal"
+
+#: /home/ruben/Projects/Cura/cura/Machines/Models/MaterialManagementModel.py:214
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:205
+msgctxt "@label"
+msgid "Custom"
+msgstr "Aangepast"
#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116
msgctxt "@label"
@@ -1024,17 +1061,6 @@ msgctxt "@label"
msgid "Available networked printers"
msgstr "Beschikbare netwerkprinters"
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689
-msgctxt "@label"
-msgid "Custom Material"
-msgstr "Aangepast materiaal"
-
-#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:690
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:203
-msgctxt "@label"
-msgid "Custom"
-msgstr "Aangepast"
-
#: /home/ruben/Projects/Cura/cura/BuildVolume.py:90
msgctxt "@info:status"
msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models."
@@ -1070,11 +1096,6 @@ msgctxt "@info"
msgid "Unable to reach the Ultimaker account server."
msgstr "Kan de Ultimaker-accountserver niet bereiken."
-#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202
-msgctxt "@action:button"
-msgid "Retry"
-msgstr "Opnieuw proberen"
-
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70
msgctxt "@message"
msgid "Please give the required permissions when authorizing this application."
@@ -1259,62 +1280,67 @@ msgctxt "@action:button"
msgid "Send report"
msgstr "Rapport verzenden"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:513
msgctxt "@info:progress"
msgid "Loading machines..."
msgstr "Machines laden..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:520
+msgctxt "@info:progress"
+msgid "Setting up preferences..."
+msgstr "Voorkeuren instellen..."
+
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:824
msgctxt "@info:progress"
msgid "Setting up scene..."
msgstr "Scene instellen..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:859
msgctxt "@info:progress"
msgid "Loading interface..."
msgstr "Interface laden..."
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1150
#, python-format
msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm."
msgid "%(width).1f x %(depth).1f x %(height).1f mm"
msgstr "%(width).1f x %(depth).1f x %(height).1f mm"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1657
#, python-brace-format
msgctxt "@info:status"
msgid "Only one G-code file can be loaded at a time. Skipped importing {0}"
msgstr "Er kan slechts één G-code-bestand tegelijkertijd worden geladen. Het importeren van {0} is overgeslagen"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1667
#, python-brace-format
msgctxt "@info:status"
msgid "Can't open any other file if G-code is loading. Skipped importing {0}"
msgstr "Kan geen ander bestand openen als G-code wordt geladen. Het importeren van {0} is overgeslagen"
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1757
msgctxt "@info:status"
msgid "The selected model was too small to load."
msgstr "Het geselecteerde model is te klein om te laden."
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:56
msgctxt "@title:label"
msgid "Printer Settings"
msgstr "Printerinstellingen"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70
msgctxt "@label"
msgid "X (Width)"
msgstr "X (Breedte)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:76
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:90
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:104
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:206
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:225
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:244
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:74
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:88
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:102
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:203
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:223
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:243
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:265
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:285
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:79
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:93
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:109
@@ -1323,57 +1349,57 @@ msgctxt "@label"
msgid "mm"
msgstr "mm"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84
msgctxt "@label"
msgid "Y (Depth)"
msgstr "Y (Diepte)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98
msgctxt "@label"
msgid "Z (Height)"
msgstr "Z (Hoogte)"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112
msgctxt "@label"
msgid "Build plate shape"
msgstr "Vorm van het platform"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125
msgctxt "@label"
msgid "Origin at center"
msgstr "Centraal oorsprongpunt"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137
msgctxt "@label"
msgid "Heated bed"
msgstr "Verwarmd bed"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149
msgctxt "@label"
msgid "Heated build volume"
msgstr "Verwarmde werkvolume"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:161
msgctxt "@label"
msgid "G-code flavor"
msgstr "Versie G-code"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:185
msgctxt "@title:label"
msgid "Printhead Settings"
msgstr "Printkopinstellingen"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:199
msgctxt "@label"
msgid "X min"
msgstr "X min"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:219
msgctxt "@label"
msgid "Y min"
msgstr "Y min"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:239
msgctxt "@label"
msgid "X max"
msgstr "X max"
@@ -1383,22 +1409,22 @@ msgctxt "@label"
msgid "Y max"
msgstr "Y max"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:281
msgctxt "@label"
msgid "Gantry Height"
msgstr "Rijbrughoogte"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:295
msgctxt "@label"
msgid "Number of Extruders"
msgstr "Aantal extruders"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:355
msgctxt "@title:label"
msgid "Start G-code"
msgstr "Start G-code"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:366
msgctxt "@title:label"
msgid "End G-code"
msgstr "Eind G-code"
@@ -1477,7 +1503,7 @@ msgstr "Invoegtoepassingen"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:77
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:44
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:89
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417
msgctxt "@title:tab"
msgid "Materials"
@@ -1672,11 +1698,6 @@ msgctxt "@label:table_header"
msgid "Machine"
msgstr "Machine"
-#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131
-msgctxt "@label:table_header"
-msgid "Print Core"
-msgstr "Print core"
-
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137
msgctxt "@label:table_header"
msgid "Build Plate"
@@ -1932,9 +1953,9 @@ msgid "Edit"
msgstr "Bewerken"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:88
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:155
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:138
msgctxt "@action:button"
msgid "Remove"
msgstr "Verwijderen"
@@ -1955,61 +1976,61 @@ msgctxt "@label"
msgid "Type"
msgstr "Type"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:225
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274
msgctxt "@label"
msgid "Firmware version"
msgstr "Firmwareversie"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:239
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:290
msgctxt "@label"
msgid "Address"
msgstr "Adres"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:263
msgctxt "@label"
msgid "This printer is not set up to host a group of printers."
msgstr "Deze printer is niet ingesteld voor het hosten van een groep printers."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:267
msgctxt "@label"
msgid "This printer is the host for a group of %1 printers."
msgstr "Deze printer is de host voor een groep van %1 printers."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:278
msgctxt "@label"
msgid "The printer at this address has not yet responded."
msgstr "De printer op dit adres heeft nog niet gereageerd."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283
msgctxt "@action:button"
msgid "Connect"
msgstr "Verbinden"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:296
msgctxt "@title:window"
msgid "Invalid IP address"
msgstr "Ongeldig IP-adres"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146
msgctxt "@text"
msgid "Please enter a valid IP address."
msgstr "Voer een geldig IP-adres in."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:308
msgctxt "@title:window"
msgid "Printer Address"
msgstr "Printeradres"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:331
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102
msgctxt "@label"
msgid "Enter the IP address of your printer on the network."
msgstr "Voer het IP-adres van uw printer in het netwerk in."
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181
msgctxt "@action:button"
@@ -2064,17 +2085,17 @@ msgctxt "@label:status"
msgid "Finishes %1 at %2"
msgstr "Voltooit %1 om %2"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44
-msgctxt "@action:button"
-msgid "Print"
-msgstr "Printen"
-
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:11
msgctxt "@title:window"
msgid "Print over network"
msgstr "Printen via netwerk"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:52
+msgctxt "@action:button"
+msgid "Print"
+msgstr "Printen"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:80
msgctxt "@label"
msgid "Printer selection"
msgstr "Printerselectie"
@@ -2425,70 +2446,69 @@ msgctxt "@action:label"
msgid "Smoothing"
msgstr "Effenen"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37
-msgctxt "@label"
-msgid "Mesh Type"
-msgstr "Rastertype"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68
-msgctxt "@label"
-msgid "Normal model"
-msgstr "Normaal model"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75
-msgctxt "@label"
-msgid "Print as support"
-msgstr "Printen als supportstructuur"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83
-msgctxt "@label"
-msgid "Don't support overlap with other models"
-msgstr "Supportstructuur niet laten overlappen met andere modellen"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91
-msgctxt "@label"
-msgid "Modify settings for overlap with other models"
-msgstr "Instellingen aanpassen voor overlapping met andere modellen"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99
-msgctxt "@label"
-msgid "Modify settings for infill of other models"
-msgstr "Instellingen aanpassen voor vulling van andere modellen"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:346
-msgctxt "@action:button"
-msgid "Select settings"
-msgstr "Instellingen selecteren"
-
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:388
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:13
msgctxt "@title:window"
msgid "Select Settings to Customize for this model"
msgstr "Instellingen Selecteren om Dit Model Aan te Passen"
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:56
#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:94
msgctxt "@label:textbox"
msgid "Filter..."
msgstr "Filteren..."
-#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/SettingPickDialog.qml:70
msgctxt "@label:checkbox"
msgid "Show all"
msgstr "Alles weergeven"
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:44
+msgctxt "@label"
+msgid "Mesh Type"
+msgstr "Rastertype"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:85
+msgctxt "@label"
+msgid "Normal model"
+msgstr "Normaal model"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:97
+msgctxt "@label"
+msgid "Print as support"
+msgstr "Printen als supportstructuur"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:109
+msgctxt "@label"
+msgid "Modify settings for overlaps"
+msgstr "Instellingen aanpassen voor overlapping"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:121
+msgctxt "@label"
+msgid "Don't support overlaps"
+msgstr "Supportstructuur niet laten overlappen"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:145
+msgctxt "@action:checkbox"
+msgid "Infill only"
+msgstr "Alleen vulling"
+
+#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:368
+msgctxt "@action:button"
+msgid "Select settings"
+msgstr "Instellingen selecteren"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:14
msgctxt "@title:window"
msgid "Open Project"
msgstr "Project openen"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:58
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Update/override existing profile"
msgid "Update existing"
msgstr "Bestaand(e) bijwerken"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:59
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
-msgctxt "@action:ComboBox option"
+msgctxt "@action:ComboBox Save settings in a new profile"
msgid "Create new"
msgstr "Nieuw maken"
@@ -2515,6 +2535,11 @@ msgctxt "@action:ComboBox option"
msgid "Update"
msgstr "Bijwerken"
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116
+msgctxt "@action:ComboBox option"
+msgid "Create new"
+msgstr "Nieuw maken"
+
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:106
msgctxt "@action:label"
@@ -2528,7 +2553,7 @@ msgid "Printer Group"
msgstr "Printergroep"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:220
msgctxt "@action:label"
msgid "Profile settings"
msgstr "Profielinstellingen"
@@ -2539,75 +2564,81 @@ msgid "How should the conflict in the profile be resolved?"
msgstr "Hoe dient het conflict in het profiel te worden opgelost?"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:323
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:244
msgctxt "@action:label"
msgid "Name"
msgstr "Naam"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261
+msgctxt "@action:label"
+msgid "Intent"
+msgstr "Intent"
+
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:246
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228
msgctxt "@action:label"
msgid "Not in profile"
msgstr "Niet in profiel"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:251
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:233
msgctxt "@action:label"
msgid "%1 override"
msgid_plural "%1 overrides"
msgstr[0] "%1 overschrijving"
msgstr[1] "%1 overschrijvingen"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:247
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:262
msgctxt "@action:label"
msgid "Derivative from"
msgstr "Afgeleide van"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:252
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:267
msgctxt "@action:label"
msgid "%1, %2 override"
msgid_plural "%1, %2 overrides"
msgstr[0] "%1, %2 overschrijving"
msgstr[1] "%1, %2 overschrijvingen"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:268
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:283
msgctxt "@action:label"
msgid "Material settings"
msgstr "Materiaalinstellingen"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:284
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:299
msgctxt "@info:tooltip"
msgid "How should the conflict in the material be resolved?"
msgstr "Hoe dient het materiaalconflict te worden opgelost?"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:342
msgctxt "@action:label"
msgid "Setting visibility"
msgstr "Zichtbaarheid instellen"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:336
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:351
msgctxt "@action:label"
msgid "Mode"
msgstr "Modus"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:367
msgctxt "@action:label"
msgid "Visible settings:"
msgstr "Zichtbare instellingen:"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:372
msgctxt "@action:label"
msgid "%1 out of %2"
msgstr "%1 van %2"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:383
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:398
msgctxt "@action:warning"
msgid "Loading a project will clear all models on the build plate."
msgstr "Als u een project laadt, worden alle modellen van het platform gewist."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:401
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:416
msgctxt "@action:button"
msgid "Open"
msgstr "Openen"
@@ -2714,54 +2745,6 @@ msgctxt "@checkbox:description"
msgid "Automatically create a backup each day that Cura is started."
msgstr "Maak elke dag dat Cura wordt gestart, automatisch een back-up."
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMainSettingsSelector.qml:75
-msgctxt "@label"
-msgid "Not supported"
-msgstr "Niet ondersteund"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:35
-msgctxt "@action:button"
-msgid "Previous"
-msgstr "Vorige"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:174
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:159
-msgctxt "@action:button"
-msgid "Export"
-msgstr "Exporteren"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209
-msgctxt "@label"
-msgid "Tip"
-msgstr "Tip"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorMaterialMenu.qml:20
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66
-msgctxt "@label:category menu label"
-msgid "Generic"
-msgstr "Standaard"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:160
-msgctxt "@label"
-msgid "Print experiment"
-msgstr "Print experiment"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:25
-msgctxt "@label"
-msgid "Checklist"
-msgstr "Checklist"
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:30
-msgctxt "@label"
-msgid "Please select any upgrades made to this Ultimaker 2."
-msgstr "Selecteer eventuele upgrades die op deze Ultimaker 2 zijn uitgevoerd."
-
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:44
-msgctxt "@label"
-msgid "Olsson Block"
-msgstr "Olsson-blok"
-
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:30
msgctxt "@title"
msgid "Build Plate Leveling"
@@ -2795,7 +2778,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"
@@ -2847,170 +2830,176 @@ msgctxt "@label"
msgid "Are you sure you want to abort the print?"
msgstr "Weet u zeker dat u het printen wilt afbreken?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:72
msgctxt "@title"
msgid "Information"
msgstr "Informatie"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
msgctxt "@title:window"
msgid "Confirm Diameter Change"
msgstr "Diameterwijziging bevestigen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:102
msgctxt "@label (%1 is a number)"
msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?"
msgstr "Het nieuwe filament is ingesteld op %1 mm. Dit is niet compatibel met de huidige extruder. Wilt u verder gaan?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:128
msgctxt "@label"
msgid "Display Name"
msgstr "Naam"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:138
msgctxt "@label"
msgid "Brand"
msgstr "Merk"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:148
msgctxt "@label"
msgid "Material Type"
msgstr "Type Materiaal"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:158
msgctxt "@label"
msgid "Color"
msgstr "Kleur"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:208
msgctxt "@label"
msgid "Properties"
msgstr "Eigenschappen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:210
msgctxt "@label"
msgid "Density"
msgstr "Dichtheid"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:225
msgctxt "@label"
msgid "Diameter"
msgstr "Diameter"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:259
msgctxt "@label"
msgid "Filament Cost"
msgstr "Kostprijs Filament"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:276
msgctxt "@label"
msgid "Filament weight"
msgstr "Gewicht filament"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:294
msgctxt "@label"
msgid "Filament length"
msgstr "Lengte filament"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:303
msgctxt "@label"
msgid "Cost per Meter"
msgstr "Kostprijs per meter"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:317
msgctxt "@label"
msgid "This material is linked to %1 and shares some of its properties."
msgstr "Dit materiaal is gekoppeld aan %1 en deelt hiermee enkele eigenschappen."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:324
msgctxt "@label"
msgid "Unlink Material"
msgstr "Materiaal ontkoppelen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:335
msgctxt "@label"
msgid "Description"
msgstr "Beschrijving"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:348
msgctxt "@label"
msgid "Adhesion Information"
msgstr "Gegevens Hechting"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:374
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19
msgctxt "@label"
msgid "Print settings"
msgstr "Instellingen voor printen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:108
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:84
msgctxt "@action:button"
msgid "Activate"
msgstr "Activeren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:126
msgctxt "@action:button"
msgid "Create"
msgstr "Maken"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:140
msgctxt "@action:button"
msgid "Duplicate"
msgstr "Dupliceren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:170
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:167
msgctxt "@action:button"
msgid "Import"
msgstr "Importeren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:184
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:179
+msgctxt "@action:button"
+msgid "Export"
+msgstr "Exporteren"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:233
msgctxt "@action:label"
msgid "Printer"
msgstr "Printer"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:297
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:274
msgctxt "@title:window"
msgid "Confirm Remove"
msgstr "Verwijderen Bevestigen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:300
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:275
msgctxt "@label (%1 is object name)"
msgid "Are you sure you wish to remove %1? This cannot be undone!"
msgstr "Weet u zeker dat u %1 wilt verwijderen? Deze bewerking kan niet ongedaan worden gemaakt!"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:314
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:322
msgctxt "@title:window"
msgid "Import Material"
msgstr "Materiaal Importeren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:323
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Could not import material %1: %2"
msgstr "Kon materiaal %1 niet importeren: %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:327
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully imported material %1"
msgstr "Materiaal %1 is geïmporteerd"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:345
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
msgctxt "@title:window"
msgid "Export Material"
msgstr "Materiaal Exporteren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:357
msgctxt "@info:status Don't translate the XML tags and !"
msgid "Failed to export material to %1: %2"
msgstr "Exporteren van materiaal naar %1 is mislukt: %2"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:363
msgctxt "@info:status Don't translate the XML tag !"
msgid "Successfully exported material to %1"
msgstr "Materiaal is geëxporteerd naar %1"
@@ -3025,27 +3014,27 @@ msgctxt "@label:textbox"
msgid "Check all"
msgstr "Alles aanvinken"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:48
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
msgctxt "@info:status"
msgid "Calculated"
msgstr "Berekend"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:61
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
msgctxt "@title:column"
msgid "Setting"
msgstr "Instelling"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:68
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:82
msgctxt "@title:column"
msgid "Profile"
msgstr "Profiel"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:89
msgctxt "@title:column"
msgid "Current"
msgstr "Huidig"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:83
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:97
msgctxt "@title:column"
msgid "Unit"
msgstr "Eenheid"
@@ -3056,307 +3045,301 @@ msgctxt "@title:tab"
msgid "General"
msgstr "Algemeen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:132
msgctxt "@label"
msgid "Interface"
msgstr "Interface"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:143
msgctxt "@label"
msgid "Language:"
msgstr "Taal:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:210
msgctxt "@label"
msgid "Currency:"
msgstr "Valuta:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:223
msgctxt "@label"
msgid "Theme:"
msgstr "Thema:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:279
msgctxt "@label"
msgid "You will need to restart the application for these changes to have effect."
msgstr "U moet de toepassing opnieuw starten voordat deze wijzigingen van kracht worden."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:296
msgctxt "@info:tooltip"
msgid "Slice automatically when changing settings."
msgstr "Automatisch slicen bij wijzigen van instellingen."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:304
msgctxt "@option:check"
msgid "Slice automatically"
msgstr "Automatisch slicen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:318
msgctxt "@label"
msgid "Viewport behavior"
msgstr "Gedrag kijkvenster"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:326
msgctxt "@info:tooltip"
msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly."
msgstr "Geef niet-ondersteunde gedeelten van het model een rode markering. Zonder ondersteuning zullen deze gedeelten niet goed worden geprint."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:335
msgctxt "@option:check"
msgid "Display overhang"
msgstr "Overhang weergeven"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:343
msgctxt "@info:tooltip"
msgid "Moves the camera so the model is in the center of the view when a model is selected"
msgstr "Verplaatst de camera zodanig dat wanneer een model wordt geselecteerd, het model in het midden van het beeld wordt weergegeven"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348
msgctxt "@action:button"
msgid "Center camera when item is selected"
msgstr "Camera centreren wanneer een item wordt geselecteerd"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:358
msgctxt "@info:tooltip"
msgid "Should the default zoom behavior of cura be inverted?"
msgstr "Moet het standaard zoomgedrag van Cura worden omgekeerd?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:363
msgctxt "@action:button"
msgid "Invert the direction of camera zoom."
msgstr "Keer de richting van de camerazoom om."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Should zooming move in the direction of the mouse?"
msgstr "Moet het zoomen in de richting van de muis gebeuren?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:379
msgctxt "@info:tooltip"
msgid "Zooming towards the mouse is not supported in the orthographic perspective."
msgstr "Zoomen in de richting van de muis wordt niet ondersteund in het orthografische perspectief."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384
msgctxt "@action:button"
msgid "Zoom toward mouse direction"
msgstr "Zoomen in de richting van de muis"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:410
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved so that they no longer intersect?"
msgstr "Moeten modellen op het platform zodanig worden verplaatst dat ze elkaar niet meer doorsnijden?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415
msgctxt "@option:check"
msgid "Ensure models are kept apart"
msgstr "Modellen gescheiden houden"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:424
msgctxt "@info:tooltip"
msgid "Should models on the platform be moved down to touch the build plate?"
msgstr "Moeten modellen in het printgebied omlaag worden gebracht zodat ze het platform raken?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:429
msgctxt "@option:check"
msgid "Automatically drop models to the build plate"
msgstr "Modellen automatisch op het platform laten vallen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441
msgctxt "@info:tooltip"
msgid "Show caution message in g-code reader."
msgstr "Toon het waarschuwingsbericht in de G-code-lezer."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
msgctxt "@option:check"
msgid "Caution message in g-code reader"
msgstr "Waarschuwingsbericht in de G-code-lezer"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:458
msgctxt "@info:tooltip"
msgid "Should layer be forced into compatibility mode?"
msgstr "Moet de laag in de compatibiliteitsmodus worden geforceerd?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:463
msgctxt "@option:check"
msgid "Force layer view compatibility mode (restart required)"
msgstr "Compatibiliteitsmodus voor laagweergave forceren (opnieuw opstarten vereist)"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:473
+msgctxt "@info:tooltip"
+msgid "Should Cura open at the location it was closed?"
+msgstr "Moet Cura openen op de locatie waar het gesloten werd?"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:478
+msgctxt "@option:check"
+msgid "Restore window position on start"
+msgstr "Herstel de vensterpositie bij het opstarten"
+
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:488
msgctxt "@info:tooltip"
msgid "What type of camera rendering should be used?"
msgstr "Welk type cameraweergave moet worden gebruikt?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495
msgctxt "@window:text"
-msgid "Camera rendering: "
-msgstr "Cameraweergave: "
+msgid "Camera rendering:"
+msgstr "Cameraweergave:"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506
msgid "Perspective"
msgstr "Perspectief"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507
msgid "Orthographic"
msgstr "Orthografisch"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538
msgctxt "@label"
msgid "Opening and saving files"
msgstr "Bestanden openen en opslaan"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:545
msgctxt "@info:tooltip"
msgid "Should models be scaled to the build volume if they are too large?"
msgstr "Moeten modellen worden geschaald naar het werkvolume als ze te groot zijn?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:550
msgctxt "@option:check"
msgid "Scale large models"
msgstr "Grote modellen schalen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:560
msgctxt "@info:tooltip"
msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?"
msgstr "Een model wordt mogelijk extreem klein weergegeven als de eenheden bijvoorbeeld in meters zijn in plaats van in millimeters. Moeten dergelijke modellen worden opgeschaald?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:565
msgctxt "@option:check"
msgid "Scale extremely small models"
msgstr "Extreem kleine modellen schalen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575
msgctxt "@info:tooltip"
msgid "Should models be selected after they are loaded?"
msgstr "Moeten modellen worden geselecteerd nadat ze zijn geladen?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:580
msgctxt "@option:check"
msgid "Select models when loaded"
msgstr "Modellen selecteren wanneer ze geladen zijn"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590
msgctxt "@info:tooltip"
msgid "Should a prefix based on the printer name be added to the print job name automatically?"
msgstr "Moet er automatisch een op de printernaam gebaseerde voorvoegsel aan de naam van de printtaak worden toegevoegd?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:595
msgctxt "@option:check"
msgid "Add machine prefix to job name"
msgstr "Machinevoorvoegsel toevoegen aan taaknaam"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:605
msgctxt "@info:tooltip"
msgid "Should a summary be shown when saving a project file?"
msgstr "Dient er een samenvatting te worden weergegeven wanneer een projectbestand wordt opgeslagen?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609
msgctxt "@option:check"
msgid "Show summary dialog when saving project"
msgstr "Dialoogvenster voor samenvatting weergeven tijdens het opslaan van een project"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
msgctxt "@info:tooltip"
msgid "Default behavior when opening a project file"
msgstr "Standaardgedrag tijdens het openen van een projectbestand"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:627
msgctxt "@window:text"
msgid "Default behavior when opening a project file: "
msgstr "Standaardgedrag tijdens het openen van een projectbestand: "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641
msgctxt "@option:openProject"
msgid "Always ask me this"
msgstr "Altijd vragen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:642
msgctxt "@option:openProject"
msgid "Always open as a project"
msgstr "Altijd als project openen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:643
msgctxt "@option:openProject"
msgid "Always import models"
msgstr "Altijd modellen importeren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:679
msgctxt "@info:tooltip"
msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again."
msgstr "Wanneer u wijzigingen hebt aangebracht aan een profiel en naar een ander profiel wisselt, wordt een dialoogvenster weergegeven waarin u wordt gevraagd of u de aanpassingen wilt behouden. U kunt ook een standaardgedrag kiezen en het dialoogvenster nooit meer laten weergeven."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:52
msgctxt "@label"
msgid "Profiles"
msgstr "Profielen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:693
msgctxt "@window:text"
msgid "Default behavior for changed setting values when switching to a different profile: "
msgstr "Standaardgedrag voor gewijzigde instellingen wanneer er naar een ander profiel wordt overgeschakeld: "
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:707
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157
msgctxt "@option:discardOrKeep"
msgid "Always ask me this"
msgstr "Altijd vragen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708
msgctxt "@option:discardOrKeep"
msgid "Always discard changed settings"
msgstr "Gewijzigde instellingen altijd verwijderen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:709
msgctxt "@option:discardOrKeep"
msgid "Always transfer changed settings to new profile"
msgstr "Gewijzigde instellingen altijd naar nieuw profiel overbrengen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743
msgctxt "@label"
msgid "Privacy"
msgstr "Privacy"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:750
msgctxt "@info:tooltip"
msgid "Should Cura check for updates when the program is started?"
msgstr "Moet Cura op updates controleren wanneer het programma wordt gestart?"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:755
msgctxt "@option:check"
msgid "Check for updates on start"
msgstr "Bij starten op updates controleren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:765
msgctxt "@info:tooltip"
msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored."
msgstr "Mogen anonieme gegevens over uw print naar Ultimaker worden verzonden? Opmerking: er worden geen modellen, IP-adressen of andere persoonlijk identificeerbare gegevens verzonden of opgeslagen."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:770
msgctxt "@option:check"
msgid "Send (anonymous) print information"
msgstr "(Anonieme) printgegevens verzenden"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:779
msgctxt "@action:button"
msgid "More information"
msgstr "Meer informatie"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:774
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:27
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ProfileMenu.qml:23
-msgctxt "@label"
-msgid "Experimental"
-msgstr "Experimenteel"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781
-msgctxt "@info:tooltip"
-msgid "Use multi build plate functionality"
-msgstr "Functionaliteit voor meerdere platformen gebruiken"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786
-msgctxt "@option:check"
-msgid "Use multi build plate functionality (restart required)"
-msgstr "Functionaliteit voor meerdere platformen gebruiken (opnieuw opstarten vereist)"
-
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415
msgctxt "@title:tab"
@@ -3364,93 +3347,84 @@ msgid "Printers"
msgstr "Printers"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152
msgctxt "@action:button"
msgid "Rename"
msgstr "Hernoemen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:34
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419
msgctxt "@title:tab"
msgid "Profiles"
msgstr "Profielen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:104
msgctxt "@label"
msgid "Create"
msgstr "Maken"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121
msgctxt "@label"
msgid "Duplicate"
msgstr "Dupliceren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:202
msgctxt "@title:window"
msgid "Create Profile"
msgstr "Profiel Maken"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:204
msgctxt "@info"
msgid "Please provide a name for this profile."
msgstr "Geef een naam op voor dit profiel."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:260
msgctxt "@title:window"
msgid "Duplicate Profile"
msgstr "Profiel Dupliceren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:291
msgctxt "@title:window"
msgid "Rename Profile"
msgstr "Profiel Hernoemen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:304
msgctxt "@title:window"
msgid "Import Profile"
msgstr "Profiel Importeren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:333
msgctxt "@title:window"
msgid "Export Profile"
msgstr "Profiel Exporteren"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:396
msgctxt "@label %1 is printer name"
msgid "Printer: %1"
msgstr "Printer: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Default profiles"
-msgstr "Standaardprofielen"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420
-msgctxt "@label"
-msgid "Custom profiles"
-msgstr "Aangepaste profielen"
-
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:554
msgctxt "@action:button"
msgid "Update profile with current settings/overrides"
msgstr "Profiel bijwerken met huidige instellingen/overschrijvingen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:561
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:257
msgctxt "@action:button"
msgid "Discard current changes"
msgstr "Huidige wijzigingen verwijderen"
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:580
msgctxt "@action:label"
msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below."
msgstr "Dit profiel gebruikt de standaardinstellingen die door de printer zijn opgegeven, dus er zijn hiervoor geen instellingen/overschrijvingen in de onderstaande lijst."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:588
msgctxt "@action:label"
msgid "Your current settings match the selected profile."
msgstr "Uw huidige instellingen komen overeen met het geselecteerde profiel."
-#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550
+#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:606
msgctxt "@title:tab"
msgid "Global Settings"
msgstr "Algemene Instellingen"
@@ -3515,35 +3489,35 @@ msgstr "Zonder titel"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:68
msgctxt "@label:textbox"
-msgid "search settings"
+msgid "Search settings"
msgstr "instellingen zoeken"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:462
msgctxt "@action:menu"
msgid "Copy value to all extruders"
msgstr "Waarde naar alle extruders kopiëren"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:471
msgctxt "@action:menu"
msgid "Copy all changed values to all extruders"
msgstr "Alle gewijzigde waarden naar alle extruders kopiëren"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:508
msgctxt "@action:menu"
msgid "Hide this setting"
msgstr "Deze instelling verbergen"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:521
msgctxt "@action:menu"
msgid "Don't show this setting"
msgstr "Deze instelling verbergen"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525
msgctxt "@action:menu"
msgid "Keep this setting visible"
msgstr "Deze instelling zichtbaar houden"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434
msgctxt "@action:menu"
msgid "Configure setting visibility..."
@@ -3575,17 +3549,17 @@ msgctxt "@label Header for list of settings."
msgid "Affected By"
msgstr "Beïnvloed door"
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:187
msgctxt "@label"
msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders."
msgstr "Deze instelling wordt altijd door alle extruders gedeeld. Als u hier de instelling wijzigt, wordt de waarde voor alle extruders gewijzigd."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:191
msgctxt "@label"
msgid "The value is resolved from per-extruder values "
msgstr "De waarde wordt afgeleid van de waarden per extruder "
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:230
msgctxt "@label"
msgid ""
"This setting has a value that is different from the profile.\n"
@@ -3596,7 +3570,7 @@ msgstr ""
"\n"
"Klik om de waarde van het profiel te herstellen."
-#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322
+#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:329
msgctxt "@label"
msgid ""
"This setting is normally calculated, but it currently has an absolute value set.\n"
@@ -3607,6 +3581,13 @@ msgstr ""
"\n"
"Klik om de berekende waarde te herstellen."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/NoIntentIcon.qml:31
+msgctxt "@label %1 is filled in with the type of a profile. %2 is filled with a list of numbers (eg '1' or '1, 2')"
+msgid "There is no %1 profile for the configuration in extruder %2. The default intent will be used instead"
+msgid_plural "There is no %1 profile for the configurations in extruders %2. The default intent will be used instead"
+msgstr[0] ""
+msgstr[1] ""
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:144
msgctxt "@button"
msgid "Recommended"
@@ -3647,26 +3628,11 @@ msgctxt "@label"
msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards."
msgstr "Het printen van een brim of raft inschakelen. Deze optie zorgt ervoor dat er extra materiaal rondom of onder het object wordt neergelegd, dat er naderhand eenvoudig kan worden afgesneden."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:175
-msgctxt "@label"
-msgid "Layer Height"
-msgstr "Laaghoogte"
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:206
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:81
msgctxt "@tooltip"
msgid "You have modified some profile settings. If you want to change these go to custom mode."
msgstr "U hebt enkele profielinstellingen aangepast. Ga naar de aangepaste modus als u deze wilt wijzigen."
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:355
-msgctxt "@tooltip"
-msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
-msgstr "Dit kwaliteitsprofiel is niet beschikbaar voor uw huidige materiaal- en nozzleconfiguratie. Breng hierin wijzigingen aan om gebruik van dit kwaliteitsprofiel mogelijk te maken."
-
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449
-msgctxt "@tooltip"
-msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
-msgstr "Er is momenteel een aangepast profiel actief. Als u de kwaliteitsschuifregelaar wilt gebruiken, kiest u een standaard kwaliteitsprofiel op het tabblad Aangepast"
-
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:13
msgctxt "@label:Should be short"
msgid "On"
@@ -3677,12 +3643,17 @@ msgctxt "@label:Should be short"
msgid "Off"
msgstr "Uit"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:27
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml:33
+msgctxt "@label"
+msgid "Experimental"
+msgstr "Experimenteel"
+
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:47
msgctxt "@label"
msgid "Profile"
msgstr "Profiel"
-#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml:94
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml:172
msgctxt "@tooltip"
msgid ""
"Some setting/override values are different from the values stored in the profile.\n"
@@ -3693,6 +3664,11 @@ msgstr ""
"\n"
"Klik om het profielbeheer te openen."
+#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml:160
+msgctxt "@label:header"
+msgid "Custom profiles"
+msgstr "Aangepaste profielen"
+
#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:21
msgctxt "@label shown when we load a Gcode file"
msgid "Print setup disabled. G-code file can not be modified."
@@ -3820,11 +3796,16 @@ msgctxt "@label:category menu label"
msgid "Material"
msgstr "Materiaal"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:42
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:46
msgctxt "@label:category menu label"
msgid "Favorites"
msgstr "Favorieten"
+#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:71
+msgctxt "@label:category menu label"
+msgid "Generic"
+msgstr "Standaard"
+
#: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25
msgctxt "@label:category menu label"
msgid "Network enabled printers"
@@ -3860,16 +3841,6 @@ msgctxt "@action:inmenu"
msgid "Disable Extruder"
msgstr "Extruder uitschakelen"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63
-msgctxt "@title:menu"
-msgid "&Build plate"
-msgstr "&Platform"
-
-#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66
-msgctxt "@title:settings"
-msgid "&Profile"
-msgstr "&Profiel"
-
#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:19
msgctxt "@action:inmenu menubar:view"
msgid "&Camera position"
@@ -3949,12 +3920,12 @@ msgctxt "@header"
msgid "Configurations"
msgstr "Configuraties"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:110
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:112
msgctxt "@label"
msgid "Select configuration"
msgstr "Configuratie selecteren"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:221
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml:223
msgctxt "@label"
msgid "Configurations"
msgstr "Configuraties"
@@ -3984,12 +3955,12 @@ msgctxt "@label"
msgid "Enabled"
msgstr "Ingeschakeld"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:250
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:251
msgctxt "@label"
msgid "Material"
msgstr "Materiaal"
-#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:375
+#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:378
msgctxt "@label"
msgid "Use glue for better adhesion with this material combination."
msgstr "Gebruik lijm bij deze combinatie van materialen voor een betere hechting."
@@ -4406,44 +4377,44 @@ msgctxt "@title:tab"
msgid "Settings"
msgstr "Instellingen"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538
msgctxt "@title:window"
msgid "Closing Cura"
msgstr "Cura afsluiten"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551
msgctxt "@label"
msgid "Are you sure you want to exit Cura?"
msgstr "Weet u zeker dat u Cura wilt verlaten?"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:589
#: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19
msgctxt "@title:window"
msgid "Open file(s)"
msgstr "Bestand(en) openen"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:695
msgctxt "@window:title"
msgid "Install Package"
msgstr "Package installeren"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:703
msgctxt "@title:window"
msgid "Open File(s)"
msgstr "Bestand(en) openen"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:706
msgctxt "@text:window"
msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one."
msgstr "Binnen de door u geselecteerde bestanden zijn een of meer G-code-bestanden aangetroffen. U kunt maximaal één G-code-bestand tegelijk openen. Selecteer maximaal één bestand als u dit wilt openen als G-code-bestand."
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:809
msgctxt "@title:window"
msgid "Add Printer"
msgstr "Printer Toevoegen"
-#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818
+#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:817
msgctxt "@title:window"
msgid "What's New"
msgstr "Nieuwe functies"
@@ -4514,17 +4485,17 @@ msgctxt "@title:window"
msgid "About Cura"
msgstr "Over Cura"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:56
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:57
msgctxt "@label"
msgid "version: %1"
msgstr "versie: %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:71
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:72
msgctxt "@label"
msgid "End-to-end solution for fused filament 3D printing."
msgstr "End-to-end-oplossing voor fused filament 3D-printen."
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:84
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:85
msgctxt "@info:credit"
msgid ""
"Cura is developed by Ultimaker B.V. in cooperation with the community.\n"
@@ -4533,122 +4504,122 @@ msgstr ""
"Cura is ontwikkeld door Ultimaker B.V. in samenwerking met de community.\n"
"Cura maakt met trots gebruik van de volgende opensourceprojecten:"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:134
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
msgctxt "@label"
msgid "Graphical user interface"
msgstr "Grafische gebruikersinterface (GUI)"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:135
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
msgctxt "@label"
msgid "Application framework"
msgstr "Toepassingskader"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:136
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
msgctxt "@label"
msgid "G-code generator"
msgstr "G-code-generator"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:137
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:138
msgctxt "@label"
msgid "Interprocess communication library"
msgstr "InterProcess Communication-bibliotheek"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:139
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
msgctxt "@label"
msgid "Programming language"
msgstr "Programmeertaal"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:140
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
msgctxt "@label"
msgid "GUI framework"
msgstr "GUI-kader"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:141
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
msgctxt "@label"
msgid "GUI framework bindings"
msgstr "Bindingen met GUI-kader"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:142
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
msgctxt "@label"
msgid "C/C++ Binding library"
msgstr "Bindingenbibliotheek C/C++"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:143
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
msgctxt "@label"
msgid "Data interchange format"
msgstr "Indeling voor gegevensuitwisseling"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:144
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
msgctxt "@label"
msgid "Support library for scientific computing"
msgstr "Ondersteuningsbibliotheek voor wetenschappelijke berekeningen"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:145
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
msgctxt "@label"
msgid "Support library for faster math"
msgstr "Ondersteuningsbibliotheek voor snellere berekeningen"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:146
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
msgctxt "@label"
msgid "Support library for handling STL files"
msgstr "Ondersteuningsbibliotheek voor het verwerken van STL-bestanden"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:147
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
msgctxt "@label"
msgid "Support library for handling planar objects"
msgstr "Ondersteuningsbibliotheek voor het verwerken van tweedimensionale objecten"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:148
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
msgctxt "@label"
msgid "Support library for handling triangular meshes"
msgstr "Ondersteuningsbibliotheek voor het verwerken van driehoekig rasters"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:149
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
msgctxt "@label"
msgid "Support library for analysis of complex networks"
msgstr "Ondersteuningsbibliotheek voor de analyse van complexe netwerken"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:150
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
msgctxt "@label"
msgid "Support library for handling 3MF files"
msgstr "Ondersteuningsbibliotheek voor het verwerken van 3MF-bestanden"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:151
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
msgctxt "@label"
msgid "Support library for file metadata and streaming"
msgstr "Ondersteuningsbibliotheek voor bestandsmetadata en streaming"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:152
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
msgctxt "@label"
msgid "Serial communication library"
msgstr "Seriële-communicatiebibliotheek"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:153
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
msgctxt "@label"
msgid "ZeroConf discovery library"
msgstr "ZeroConf-detectiebibliotheek"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:154
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
msgctxt "@label"
msgid "Polygon clipping library"
msgstr "Bibliotheek met veelhoeken"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:155
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:156
msgctxt "@Label"
msgid "Python HTTP library"
msgstr "Python HTTP-bibliotheek"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:157
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
msgctxt "@label"
msgid "Font"
msgstr "Lettertype"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:158
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
msgctxt "@label"
msgid "SVG icons"
msgstr "SVG-pictogrammen"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:159
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:160
msgctxt "@label"
msgid "Linux cross-distribution application deployment"
msgstr "Implementatie van Linux-toepassing voor kruisdistributie"
@@ -4668,32 +4639,27 @@ msgctxt "@title:window"
msgid "Save Project"
msgstr "Project opslaan"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149
-msgctxt "@action:label"
-msgid "Build plate"
-msgstr "Platform"
-
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:177
msgctxt "@action:label"
msgid "Extruder %1"
msgstr "Extruder %1"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:192
msgctxt "@action:label"
msgid "%1 & material"
msgstr "%1 &materiaal"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:194
msgctxt "@action:label"
msgid "Material"
msgstr "Materiaal"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283
msgctxt "@action:label"
msgid "Don't show project summary on save again"
msgstr "Bij opnieuw opslaan projectsamenvatting niet weergeven"
-#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291
+#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:302
msgctxt "@action:button"
msgid "Save"
msgstr "Opslaan"
@@ -4869,12 +4835,12 @@ msgctxt "@label"
msgid "Troubleshooting"
msgstr "Probleemoplossing"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:211
msgctxt "@label"
msgid "Printer name"
msgstr "Printernaam"
-#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220
+#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:224
msgctxt "@text"
msgid "Please give your printer a name"
msgstr "Voer een naam in voor uw printer"
@@ -4933,6 +4899,31 @@ msgctxt "@button"
msgid "Get started"
msgstr "Aan de slag"
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:27
+msgctxt "@info:tooltip"
+msgid "3D View"
+msgstr "3D-weergave"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:40
+msgctxt "@info:tooltip"
+msgid "Front View"
+msgstr "Weergave voorzijde"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:53
+msgctxt "@info:tooltip"
+msgid "Top View"
+msgstr "Weergave bovenzijde"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:66
+msgctxt "@info:tooltip"
+msgid "Left View"
+msgstr "Linkeraanzicht"
+
+#: /home/ruben/Projects/Cura/resources/qml/ViewOrientationControls.qml:79
+msgctxt "@info:tooltip"
+msgid "Right View"
+msgstr "Rechteraanzicht"
+
#: MachineSettingsAction/plugin.json
msgctxt "description"
msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)."
@@ -4993,16 +4984,6 @@ msgctxt "name"
msgid "Model Checker"
msgstr "Modelcontrole"
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "description"
-msgid "Dump the contents of all settings to a HTML file."
-msgstr "Dump de inhoud van alle instellingen naar een HTML-bestand."
-
-#: cura-god-mode-plugin/src/GodMode/plugin.json
-msgctxt "name"
-msgid "God Mode"
-msgstr "Godmodus"
-
#: FirmwareUpdater/plugin.json
msgctxt "description"
msgid "Provides a machine actions for updating firmware."
@@ -5013,16 +4994,6 @@ msgctxt "name"
msgid "Firmware Updater"
msgstr "Firmware-updater"
-#: ProfileFlattener/plugin.json
-msgctxt "description"
-msgid "Create a flattened quality changes profile."
-msgstr "Hiermee maakt u een afgevlakte versie van het gewijzigde profiel."
-
-#: ProfileFlattener/plugin.json
-msgctxt "name"
-msgid "Profile Flattener"
-msgstr "Profielvlakker"
-
#: AMFReader/plugin.json
msgctxt "description"
msgid "Provides support for reading AMF files."
@@ -5223,6 +5194,16 @@ msgctxt "name"
msgid "Version Upgrade 3.3 to 3.4"
msgstr "Versie-upgrade van 3.3 naar 3.4"
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "description"
+msgid "Upgrades configurations from Cura 4.3 to Cura 4.4."
+msgstr "Hiermee worden configuraties bijgewerkt van Cura 4.3 naar Cura 4.4."
+
+#: VersionUpgrade/VersionUpgrade43to44/plugin.json
+msgctxt "name"
+msgid "Version Upgrade 4.3 to 4.4"
+msgstr "Versie-upgrade van 4.3 naar 4.4"
+
#: VersionUpgrade/VersionUpgrade25to26/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 2.5 to Cura 2.6."
@@ -5423,16 +5404,6 @@ msgctxt "name"
msgid "Cura Profile Writer"
msgstr "Cura-profielschrijver"
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "description"
-msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
-msgstr "Maakt het fabrikanten mogelijk nieuwe materiaal- en kwaliteitsprofielen aan te maken met behulp van een drop-in-gebruikersinterface."
-
-#: CuraPrintProfileCreator/plugin.json
-msgctxt "name"
-msgid "Print Profile Assistant"
-msgstr "Profielassistent afdrukken"
-
#: 3MFWriter/plugin.json
msgctxt "description"
msgid "Provides support for writing 3MF files."
@@ -5473,6 +5444,158 @@ msgctxt "name"
msgid "Cura Profile Reader"
msgstr "Cura-profiellezer"
+#~ msgctxt "@item:inmenu"
+#~ msgid "Flatten active settings"
+#~ msgstr "Actieve instellingen platmaken"
+
+#~ msgctxt "@info:status"
+#~ msgid "Profile has been flattened & activated."
+#~ msgstr "Profiel is platgemaakt en geactiveerd."
+
+#~ msgctxt "X3g Writer Plugin Description"
+#~ msgid "Writes X3g to files"
+#~ msgstr "Schrijft X3g naar bestanden"
+
+#~ msgctxt "X3g Writer File Description"
+#~ msgid "X3g File"
+#~ msgstr "X3g-bestand"
+
+#~ msgctxt "X3G Writer File Description"
+#~ msgid "X3G File"
+#~ msgstr "X3G-bestand"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Open Compressed Triangle Mesh"
+#~ msgstr "Gecomprimeerde driehoeksnet openen"
+
+#~ msgctxt "@item:inmenu"
+#~ msgid "Profile Assistant"
+#~ msgstr "Profielassistent"
+
+#~ msgctxt "@item:inlistbox"
+#~ msgid "Profile Assistant"
+#~ msgstr "Profielassistent"
+
+#~ msgctxt "@action:button"
+#~ msgid "Retry"
+#~ msgstr "Opnieuw proberen"
+
+#~ msgctxt "@label:table_header"
+#~ msgid "Print Core"
+#~ msgstr "Print core"
+
+#~ msgctxt "@label"
+#~ msgid "Don't support overlap with other models"
+#~ msgstr "Supportstructuur niet laten overlappen met andere modellen"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for overlap with other models"
+#~ msgstr "Instellingen aanpassen voor overlapping met andere modellen"
+
+#~ msgctxt "@label"
+#~ msgid "Modify settings for infill of other models"
+#~ msgstr "Instellingen aanpassen voor vulling van andere modellen"
+
+#~ msgctxt "@action:ComboBox option"
+#~ msgid "Update existing"
+#~ msgstr "Bestaand(e) bijwerken"
+
+#~ msgctxt "@label"
+#~ msgid "Not supported"
+#~ msgstr "Niet ondersteund"
+
+#~ msgctxt "@action:button"
+#~ msgid "Previous"
+#~ msgstr "Vorige"
+
+#~ msgctxt "@label"
+#~ msgid "Tip"
+#~ msgstr "Tip"
+
+#~ msgctxt "@label"
+#~ msgid "Print experiment"
+#~ msgstr "Print experiment"
+
+#~ msgctxt "@label"
+#~ msgid "Checklist"
+#~ msgstr "Checklist"
+
+#~ msgctxt "@label"
+#~ msgid "Please select any upgrades made to this Ultimaker 2."
+#~ msgstr "Selecteer eventuele upgrades die op deze Ultimaker 2 zijn uitgevoerd."
+
+#~ msgctxt "@label"
+#~ msgid "Olsson Block"
+#~ msgstr "Olsson-blok"
+
+#~ msgctxt "@window:text"
+#~ msgid "Camera rendering: "
+#~ msgstr "Cameraweergave: "
+
+#~ msgctxt "@info:tooltip"
+#~ msgid "Use multi build plate functionality"
+#~ msgstr "Functionaliteit voor meerdere platformen gebruiken"
+
+#~ msgctxt "@option:check"
+#~ msgid "Use multi build plate functionality (restart required)"
+#~ msgstr "Functionaliteit voor meerdere platformen gebruiken (opnieuw opstarten vereist)"
+
+#~ msgctxt "@label"
+#~ msgid "Default profiles"
+#~ msgstr "Standaardprofielen"
+
+#~ msgctxt "@label:textbox"
+#~ msgid "search settings"
+#~ msgstr "instellingen zoeken"
+
+#~ msgctxt "@label"
+#~ msgid "Layer Height"
+#~ msgstr "Laaghoogte"
+
+#~ msgctxt "@tooltip"
+#~ msgid "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile."
+#~ msgstr "Dit kwaliteitsprofiel is niet beschikbaar voor uw huidige materiaal- en nozzleconfiguratie. Breng hierin wijzigingen aan om gebruik van dit kwaliteitsprofiel mogelijk te maken."
+
+#~ msgctxt "@tooltip"
+#~ msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
+#~ msgstr "Er is momenteel een aangepast profiel actief. Als u de kwaliteitsschuifregelaar wilt gebruiken, kiest u een standaard kwaliteitsprofiel op het tabblad Aangepast"
+
+#~ msgctxt "@title:menu"
+#~ msgid "&Build plate"
+#~ msgstr "&Platform"
+
+#~ msgctxt "@title:settings"
+#~ msgid "&Profile"
+#~ msgstr "&Profiel"
+
+#~ msgctxt "@action:label"
+#~ msgid "Build plate"
+#~ msgstr "Platform"
+
+#~ msgctxt "description"
+#~ msgid "Dump the contents of all settings to a HTML file."
+#~ msgstr "Dump de inhoud van alle instellingen naar een HTML-bestand."
+
+#~ msgctxt "name"
+#~ msgid "God Mode"
+#~ msgstr "Godmodus"
+
+#~ msgctxt "description"
+#~ msgid "Create a flattened quality changes profile."
+#~ msgstr "Hiermee maakt u een afgevlakte versie van het gewijzigde profiel."
+
+#~ msgctxt "name"
+#~ msgid "Profile Flattener"
+#~ msgstr "Profielvlakker"
+
+#~ msgctxt "description"
+#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI."
+#~ msgstr "Maakt het fabrikanten mogelijk nieuwe materiaal- en kwaliteitsprofielen aan te maken met behulp van een drop-in-gebruikersinterface."
+
+#~ msgctxt "name"
+#~ msgid "Print Profile Assistant"
+#~ msgstr "Profielassistent afdrukken"
+
#~ msgctxt "@info:status"
#~ msgid "Connected over the network."
#~ msgstr "Via het netwerk verbonden."
diff --git a/resources/i18n/nl_NL/fdmextruder.def.json.po b/resources/i18n/nl_NL/fdmextruder.def.json.po
index 3d30c6745d..9d264238b7 100644
--- a/resources/i18n/nl_NL/fdmextruder.def.json.po
+++ b/resources/i18n/nl_NL/fdmextruder.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-03-13 14:00+0200\n"
"Last-Translator: Bothof \n"
"Language-Team: Dutch\n"
diff --git a/resources/i18n/nl_NL/fdmprinter.def.json.po b/resources/i18n/nl_NL/fdmprinter.def.json.po
index 61b2b93f3b..d145a50f7c 100644
--- a/resources/i18n/nl_NL/fdmprinter.def.json.po
+++ b/resources/i18n/nl_NL/fdmprinter.def.json.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Cura 4.3\n"
+"Project-Id-Version: Cura 4.4\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0000\n"
+"POT-Creation-Date: 2019-11-05 13:13+0000\n"
"PO-Revision-Date: 2019-07-29 15:51+0200\n"
"Last-Translator: Lionbridge \n"
"Language-Team: Dutch , Dutch \n"
@@ -1030,6 +1030,17 @@ msgctxt "bottom_layers description"
msgid "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number."
msgstr "Het aantal bodemlagen. Wanneer deze waarde wordt berekend aan de hand van de dikte van de bodem, wordt deze afgerond naar een geheel getal."
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers label"
+msgid "Initial Bottom Layers"
+msgstr "Eerste onderste lagen"
+
+#: fdmprinter.def.json
+msgctxt "initial_bottom_layers description"
+msgid "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number."
+msgstr "Het aantal initiële onderste lagen, vanaf de bouwplaat naar boven. Wanneer deze waarde wordt berekend aan de hand van de dikte van de bodem, wordt deze"
+" afgerond naar een geheel getal."
+
#: fdmprinter.def.json
msgctxt "top_bottom_pattern label"
msgid "Top/Bottom Pattern"
@@ -1423,8 +1434,7 @@ msgstr "Strijken inschakelen"
#: fdmprinter.def.json
msgctxt "ironing_enabled description"
msgid "Go over the top surface one additional time, but this time extruding very little material. This is meant to melt the plastic on top further, creating a smoother surface. The pressure in the nozzle chamber is kept high so that the creases in the surface are filled with material."
-msgstr "Nog een extra keer over de bovenlaag gaan, dit keer zonder veel materiaal te extruderen. Hierdoor wordt de kunststof aan de bovenkant verder gesmolten,"
-" waardoor een gladder oppervlak wordt verkregen. De kamerdruk in de nozzle wordt hoog gehouden zodat de spleten in het oppervlak met materiaal worden gevuld."
+msgstr "Nog een extra keer over de bovenlaag gaan, dit keer zonder veel materiaal te extruderen. Hierdoor wordt de kunststof aan de bovenkant verder gesmolten, waardoor een gladder oppervlak wordt verkregen. De kamerdruk in de nozzle wordt hoog gehouden zodat de spleten in het oppervlak met materiaal worden gevuld."
#: fdmprinter.def.json
msgctxt "ironing_only_highest_layer label"
@@ -3568,9 +3578,7 @@ msgstr "Lijnrichting Vulling Supportstructuur"
#: fdmprinter.def.json
msgctxt "support_infill_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angle 0 degrees."
-msgstr "Een lijst met gehele getallen voor lijnrichtingen die moet worden gebruikt. Elementen uit de lijst worden tijdens het printen van de lagen opeenvolgend"
-" gebruikt. Wanneer het einde van de lijst bereikt is, wordt deze weer van voren af aan gestart. De lijstitems zijn gescheiden door komma's en de hele lijst"
-" is binnen vierkante haken geplaatst. Standaard wordt een lege lijst gebruikt, wat inhoudt dat de standaardhoek van 0 graden wordt gebruikt."
+msgstr "Een lijst met gehele getallen voor lijnrichtingen die moet worden gebruikt. Elementen uit de lijst worden tijdens het printen van de lagen opeenvolgend gebruikt. Wanneer het einde van de lijst bereikt is, wordt deze weer van voren af aan gestart. De lijstitems zijn gescheiden door komma's en de hele lijst is binnen vierkante haken geplaatst. Standaard wordt een lege lijst gebruikt, wat inhoudt dat de standaardhoek van 0 graden wordt gebruikt."
#: fdmprinter.def.json
msgctxt "support_brim_enable label"
@@ -3984,8 +3992,8 @@ msgstr "Minimumgebied verbindingsstructuur"
#: fdmprinter.def.json
msgctxt "minimum_interface_area description"
-msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
-msgstr "Minimumgebied voor verbindingspolygonen. Polygonen met een gebied dat kleiner is dan deze waarde, worden niet gegenereerd."
+msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Minimumgebied voor verbindingspolygonen. Polygonen met een gebied dat kleiner is dan deze waarde worden geprint als normale ondersteuning."
#: fdmprinter.def.json
msgctxt "minimum_roof_area label"
@@ -3994,8 +4002,8 @@ msgstr "Minimumgebied supportdak"
#: fdmprinter.def.json
msgctxt "minimum_roof_area description"
-msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "Minimumgebied voor de supportdaken. Polygonen met een gebied dat kleiner is dan deze waarde, worden niet gegenereerd."
+msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Minimumgebied voor de supportdaken. Polygonen met een gebied dat kleiner is dan deze waarde worden geprint als normale ondersteuning."
#: fdmprinter.def.json
msgctxt "minimum_bottom_area label"
@@ -4004,8 +4012,8 @@ msgstr "Minimumgebied supportvloer"
#: fdmprinter.def.json
msgctxt "minimum_bottom_area description"
-msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
-msgstr "Minimumgebied voor de supportvloeren. Polygonen met een gebied dat kleiner is dan deze waarde, worden niet gegenereerd."
+msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will be printed as normal support."
+msgstr "Minimumgebied voor de supportvloeren. Polygonen met een gebied dat kleiner is dan deze waarde worden geprint als normale ondersteuning."
#: fdmprinter.def.json
msgctxt "support_interface_offset label"
@@ -4045,10 +4053,7 @@ msgstr "Lijnrichting interface supportstructuur"
#: fdmprinter.def.json
msgctxt "support_interface_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Een lijst met gehele getallen voor lijnrichtingen die moet worden gebruikt. Elementen uit de lijst worden tijdens het printen van de lagen opeenvolgend"
-" gebruikt. Wanneer het einde van de lijst bereikt is, wordt deze weer van voren af aan gestart. De lijstitems zijn gescheiden door komma's en de hele lijst"
-" is binnen vierkante haken geplaatst. Standaard wordt een lege lijst gebruikt, wat inhoudt dat de standaardhoeken (variërend tussen 45 en 135 graden als"
-" interfaces vrij dik of 90 graden zijn) worden gebruikt."
+msgstr "Een lijst met gehele getallen voor lijnrichtingen die moet worden gebruikt. Elementen uit de lijst worden tijdens het printen van de lagen opeenvolgend gebruikt. Wanneer het einde van de lijst bereikt is, wordt deze weer van voren af aan gestart. De lijstitems zijn gescheiden door komma's en de hele lijst is binnen vierkante haken geplaatst. Standaard wordt een lege lijst gebruikt, wat inhoudt dat de standaardhoeken (variërend tussen 45 en 135 graden als interfaces vrij dik of 90 graden zijn) worden gebruikt."
#: fdmprinter.def.json
msgctxt "support_roof_angles label"
@@ -4058,10 +4063,7 @@ msgstr "Lijnrichting supportdak"
#: fdmprinter.def.json
msgctxt "support_roof_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Een lijst met gehele getallen voor lijnrichtingen die moet worden gebruikt. Elementen uit de lijst worden tijdens het printen van de lagen opeenvolgend"
-" gebruikt. Wanneer het einde van de lijst bereikt is, wordt deze weer van voren af aan gestart. De lijstitems zijn gescheiden door komma's en de hele lijst"
-" is binnen vierkante haken geplaatst. Standaard wordt een lege lijst gebruikt, wat inhoudt dat de standaardhoeken (variërend tussen 45 en 135 graden als"
-" interfaces vrij dik of 90 graden zijn) worden gebruikt."
+msgstr "Een lijst met gehele getallen voor lijnrichtingen die moet worden gebruikt. Elementen uit de lijst worden tijdens het printen van de lagen opeenvolgend gebruikt. Wanneer het einde van de lijst bereikt is, wordt deze weer van voren af aan gestart. De lijstitems zijn gescheiden door komma's en de hele lijst is binnen vierkante haken geplaatst. Standaard wordt een lege lijst gebruikt, wat inhoudt dat de standaardhoeken (variërend tussen 45 en 135 graden als interfaces vrij dik of 90 graden zijn) worden gebruikt."
#: fdmprinter.def.json
msgctxt "support_bottom_angles label"
@@ -4071,10 +4073,7 @@ msgstr "Lijnrichting supportvloer"
#: fdmprinter.def.json
msgctxt "support_bottom_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
-msgstr "Een lijst met gehele getallen voor lijnrichtingen die moet worden gebruikt. Elementen uit de lijst worden tijdens het printen van de lagen opeenvolgend"
-" gebruikt. Wanneer het einde van de lijst bereikt is, wordt deze weer van voren af aan gestart. De lijstitems zijn gescheiden door komma's en de hele lijst"
-" is binnen vierkante haken geplaatst. Standaard wordt een lege lijst gebruikt, wat inhoudt dat de standaardhoeken (variërend tussen 45 en 135 graden als"
-" interfaces vrij dik of 90 graden zijn) worden gebruikt."
+msgstr "Een lijst met gehele getallen voor lijnrichtingen die moet worden gebruikt. Elementen uit de lijst worden tijdens het printen van de lagen opeenvolgend gebruikt. Wanneer het einde van de lijst bereikt is, wordt deze weer van voren af aan gestart. De lijstitems zijn gescheiden door komma's en de hele lijst is binnen vierkante haken geplaatst. Standaard wordt een lege lijst gebruikt, wat inhoudt dat de standaardhoeken (variërend tussen 45 en 135 graden als interfaces vrij dik of 90 graden zijn) worden gebruikt."
#: fdmprinter.def.json
msgctxt "support_fan_enable label"
@@ -4800,6 +4799,36 @@ msgctxt "remove_empty_first_layers description"
msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle."
msgstr "Hiermee worden de lege lagen onder de eerste geprinte laag verwijderd, indien aanwezig. Als u deze instelling uitschakelt, kunnen lege eerste lagen ontstaan als de Slicetolerantie is ingesteld op Exclusief of Midden."
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution label"
+msgid "Maximum Resolution"
+msgstr "Maximale resolutie"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_resolution description"
+msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
+msgstr "Het minimale formaat van een lijnsegment na het slicen. Als u deze waarde verhoogt, wordt het model met een lagere resolutie geprint. Hiermee kan de printer de verwerkingssnelheid van de G-code bijhouden en wordt de slicesnelheid verhoogd doordat details van het raster worden verwijderd die niet kunnen worden verwerkt."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution label"
+msgid "Maximum Travel Resolution"
+msgstr "Maximale bewegingsresolutie"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_travel_resolution description"
+msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
+msgstr "Het minimale formaat van een bewegingslijnsegment na het slicen. Als u deze waarde verhoogt, hebben de bewegingen minder vloeiende hoeken. Hiermee kan de printer de verwerkingssnelheid van de G-code bijhouden, maar kan het model door vermijding minder nauwkeurig worden."
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation label"
+msgid "Maximum Deviation"
+msgstr "Maximale afwijking"
+
+#: fdmprinter.def.json
+msgctxt "meshfix_maximum_deviation description"
+msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
+msgstr "De maximaal toegestane afwijking tijdens het verlagen van de resolutie voor de instelling Maximale resolutie. Als u deze waarde verhoogt, wordt de print minder nauwkeurig, maar wordt de G-code kleiner. Maximale afwijking is een limiet voor Maximale resolutie, dus als de twee tegenstrijdig zijn, wordt de Maximale afwijking altijd aangehouden."
+
#: fdmprinter.def.json
msgctxt "blackmagic label"
msgid "Special Modes"
@@ -5175,38 +5204,6 @@ msgctxt "minimum_polygon_circumference description"
msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details."
msgstr "Polygonen in geslicete lagen, die een kleinere omtrek hebben dan deze waarde, worden eruit gefilterd. Bij lagere waarden krijgt het raster een hogere resolutie, waardoor het slicen langer duurt. Dit is voornamelijk bedoeld voor SLA-printers met een hoge resolutie en zeer kleine 3D-modellen die veel details bevatten."
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution label"
-msgid "Maximum Resolution"
-msgstr "Maximale resolutie"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_resolution description"
-msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
-msgstr "Het minimale formaat van een lijnsegment na het slicen. Als u deze waarde verhoogt, wordt het model met een lagere resolutie geprint. Hiermee kan de printer de verwerkingssnelheid van de G-code bijhouden en wordt de slicesnelheid verhoogd doordat details van het raster worden verwijderd die niet kunnen worden verwerkt."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution label"
-msgid "Maximum Travel Resolution"
-msgstr "Maximale bewegingsresolutie"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_travel_resolution description"
-msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
-msgstr "Het minimale formaat van een bewegingslijnsegment na het slicen. Als u deze waarde verhoogt, hebben de bewegingen minder vloeiende hoeken. Hiermee kan de printer de verwerkingssnelheid van de G-code bijhouden, maar kan het model door vermijding minder nauwkeurig worden."
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation label"
-msgid "Maximum Deviation"
-msgstr "Maximale afwijking"
-
-#: fdmprinter.def.json
-msgctxt "meshfix_maximum_deviation description"
-msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
-msgstr "De maximaal toegestane afwijking tijdens het verlagen van de resolutie voor de instelling Maximale resolutie. Als u deze waarde verhoogt, wordt de print"
-" minder nauwkeurig, maar wordt de G-code kleiner. Maximale afwijking is een limiet voor Maximale resolutie, dus als de twee tegenstrijdig zijn, wordt de"
-" Maximale afwijking altijd aangehouden."
-
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
msgid "Break Up Support In Chunks"
@@ -5347,16 +5344,6 @@ msgctxt "coasting_speed description"
msgid "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops."
msgstr "De snelheid waarmee de printkop tijdens coasting beweegt ten opzichte van de snelheid voor het doorvoerpad. Hiervoor wordt een waarde van iets minder dan 100% aangeraden, omdat de druk in de bowden-buis zakt tijdens een coasting-beweging."
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation label"
-msgid "Alternate Skin Rotation"
-msgstr "Skinrotatie Wisselen"
-
-#: fdmprinter.def.json
-msgctxt "skin_alternate_rotation description"
-msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
-msgstr "Wissel de richting af waarin de boven-/onderlagen worden geprint. Normaal worden deze alleen diagonaal geprint. Met deze instelling worden de alleen-X- en alleen-Y-richtingen toegevoegd."
-
#: fdmprinter.def.json
msgctxt "cross_infill_pocket_size label"
msgid "Cross 3D Pocket Size"
@@ -5529,23 +5516,24 @@ msgstr "De gemiddelde afstand tussen de willekeurig geplaatste punten op elk lij
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset label"
-msgid "Flow rate compensation max extrusion offset"
+msgid "Flow Rate Compensation Max Extrusion Offset"
msgstr "Maximale extrusieoffset voor doorvoercompensatie"
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset description"
-msgid "The maximum distance in mm to compensate."
-msgstr "De maximale afstand in mm die moet worden gecompenseerd."
+msgid "The maximum distance in mm to move the filament to compensate for changes in flow rate."
+msgstr "De maximale afstand in mm om het filament te verplaatsen om veranderingen in de stroomsnelheid te compenseren."
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor label"
-msgid "Flow rate compensation factor"
+msgid "Flow Rate Compensation Factor"
msgstr "Doorvoercompensatiefactor"
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor description"
-msgid "The multiplication factor for the flow rate -> distance translation."
-msgstr "De vermenigvuldigingsfactor voor de vertaling doorvoer -> afstand."
+msgid "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."
+msgstr "Hoe ver het filament moet worden verplaatst om veranderingen in de stroomsnelheid te compenseren, als een percentage van hoe ver het filament in één seconde"
+" extrusie zou bewegen."
#: fdmprinter.def.json
msgctxt "wireframe_enabled label"
@@ -5838,13 +5826,14 @@ msgstr "Het hoogteverschil tussen de hoogte van de volgende laag ten opzichte va
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold label"
-msgid "Adaptive Layers Threshold"
-msgstr "Drempelwaarde adaptieve lagen"
+msgid "Adaptive Layers Topography Size"
+msgstr "Topografieformaat aanpasbare lagen"
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_threshold description"
-msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
-msgstr "De drempel of er al dan niet een kleinere laag moet worden gebruikt. Deze waarde wordt vergeleken met de waarde van de steilste helling in een laag."
+msgid "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."
+msgstr "Horizontale doelafstand tussen twee aangrenzende lagen. Als u deze instelling verkleint, worden dunnere lagen gebruikt om de randen van de lagen dichter"
+" bij elkaar te brengen."
#: fdmprinter.def.json
msgctxt "wall_overhang_angle label"
@@ -5853,8 +5842,9 @@ msgstr "Hoek Overhangende Wand"
#: fdmprinter.def.json
msgctxt "wall_overhang_angle description"
-msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
-msgstr "Wanden die overhangen in een hoek groter dan deze waarde, worden geprint met instellingen voor overhangende wanden. Wanneer de waarde 90 is, wordt een wand niet als een overhangende wand gezien."
+msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging. Overhang that gets supported by support will not be treated as overhang either."
+msgstr "Wanden die overhangen in een hoek groter dan deze waarde, worden geprint met instellingen voor overhangende wanden. Wanneer de waarde 90 is, wordt een"
+" wand niet als een overhangende wand gezien. Een overhang die wordt ondersteund door ondersteuning wordt ook niet als overhang gezien."
#: fdmprinter.def.json
msgctxt "wall_overhang_speed_factor label"
@@ -6233,18 +6223,18 @@ msgstr "Klein kenmerksnelheid"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor description"
-msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
-msgstr "Kleine kenmerken worden geprint met een snelheid die gelijk is aan dit percentage van hun normale printsnelheid. Langzamer printen kan de hechting en"
+msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
+msgstr "Kleine kernmerken worden geprint met een snelheid die gelijk is aan dit percentage van hun normale printsnelheid. Langzamer printen kan de hechting en"
" nauwkeurigheid verbeteren."
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 label"
-msgid "First Layer Speed"
-msgstr "Eerste laagsnelheid"
+msgid "Small Feature Initial Layer Speed"
+msgstr "Kleine kenmerken eerste laagsnelheid"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 description"
-msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy."
msgstr "Kleine kenmerken op de eerste laag worden geprint met een snelheid die gelijk is aan dit percentage van hun normale printsnelheid. Langzamer printen kan"
" de hechting en nauwkeurigheid verbeteren."
@@ -6308,6 +6298,66 @@ msgctxt "mesh_rotation_matrix description"
msgid "Transformation matrix to be applied to the model when loading it from file."
msgstr "Omzettingsmatrix die moet worden toegepast op het model wanneer dit wordt geladen vanuit een bestand."
+#~ msgctxt "minimum_interface_area description"
+#~ msgid "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Minimumgebied voor verbindingspolygonen. Polygonen met een gebied dat kleiner is dan deze waarde, worden niet gegenereerd."
+
+#~ msgctxt "minimum_roof_area description"
+#~ msgid "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Minimumgebied voor de supportdaken. Polygonen met een gebied dat kleiner is dan deze waarde, worden niet gegenereerd."
+
+#~ msgctxt "minimum_bottom_area description"
+#~ msgid "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated."
+#~ msgstr "Minimumgebied voor de supportvloeren. Polygonen met een gebied dat kleiner is dan deze waarde, worden niet gegenereerd."
+
+#~ msgctxt "skin_alternate_rotation label"
+#~ msgid "Alternate Skin Rotation"
+#~ msgstr "Skinrotatie Wisselen"
+
+#~ msgctxt "skin_alternate_rotation description"
+#~ msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions."
+#~ msgstr "Wissel de richting af waarin de boven-/onderlagen worden geprint. Normaal worden deze alleen diagonaal geprint. Met deze instelling worden de alleen-X- en alleen-Y-richtingen toegevoegd."
+
+#~ msgctxt "flow_rate_max_extrusion_offset label"
+#~ msgid "Flow rate compensation max extrusion offset"
+#~ msgstr "Maximale extrusieoffset voor doorvoercompensatie"
+
+#~ msgctxt "flow_rate_max_extrusion_offset description"
+#~ msgid "The maximum distance in mm to compensate."
+#~ msgstr "De maximale afstand in mm die moet worden gecompenseerd."
+
+#~ msgctxt "flow_rate_extrusion_offset_factor label"
+#~ msgid "Flow rate compensation factor"
+#~ msgstr "Doorvoercompensatiefactor"
+
+#~ msgctxt "flow_rate_extrusion_offset_factor description"
+#~ msgid "The multiplication factor for the flow rate -> distance translation."
+#~ msgstr "De vermenigvuldigingsfactor voor de vertaling doorvoer -> afstand."
+
+#~ msgctxt "adaptive_layer_height_threshold label"
+#~ msgid "Adaptive Layers Threshold"
+#~ msgstr "Drempelwaarde adaptieve lagen"
+
+#~ msgctxt "adaptive_layer_height_threshold description"
+#~ msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer."
+#~ msgstr "De drempel of er al dan niet een kleinere laag moet worden gebruikt. Deze waarde wordt vergeleken met de waarde van de steilste helling in een laag."
+
+#~ msgctxt "wall_overhang_angle description"
+#~ msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
+#~ msgstr "Wanden die overhangen in een hoek groter dan deze waarde, worden geprint met instellingen voor overhangende wanden. Wanneer de waarde 90 is, wordt een wand niet als een overhangende wand gezien."
+
+#~ msgctxt "small_feature_speed_factor description"
+#~ msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "Kleine kenmerken worden geprint met een snelheid die gelijk is aan dit percentage van hun normale printsnelheid. Langzamer printen kan de hechting en nauwkeurigheid verbeteren."
+
+#~ msgctxt "small_feature_speed_factor_0 label"
+#~ msgid "First Layer Speed"
+#~ msgstr "Eerste laagsnelheid"
+
+#~ msgctxt "small_feature_speed_factor_0 description"
+#~ msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
+#~ msgstr "Kleine kenmerken op de eerste laag worden geprint met een snelheid die gelijk is aan dit percentage van hun normale printsnelheid. Langzamer printen kan de hechting en nauwkeurigheid verbeteren."
+
#~ msgctxt "ironing_enabled description"
#~ msgid "Go over the top surface one additional time, but without extruding material. This is meant to melt the plastic on top further, creating a smoother surface."
#~ msgstr "Ga nog een extra keer over de bovenlaag, echter zonder materiaal door te voeren. Hierdoor wordt de kunststof aan de bovenkant verder gesmolten, waardoor een gladder oppervlak wordt verkregen."
diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po
index 79ec7b48af..27f6acbe12 100644
--- a/resources/i18n/pl_PL/cura.po
+++ b/resources/i18n/pl_PL/cura.po
@@ -6,9 +6,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Cura 4.3\n"
-"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
-"POT-Creation-Date: 2019-09-10 16:55+0200\n"
-"PO-Revision-Date: 2019-09-24 17:00+0200\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-11-05 13:13+0100\n"
+"PO-Revision-Date: 2019-11-15 15:23+0100\n"
"Last-Translator: Mariusz Matłosz \n"
"Language-Team: Mariusz Matłosz , reprapy.pl\n"
"Language: pl_PL\n"
@@ -16,10 +16,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.2.3\n"
+"X-Generator: Poedit 2.2.4\n"
"X-Poedit-SourceCharset: UTF-8\n"
-#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28
+#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:30
msgctxt "@action"
msgid "Machine Settings"
msgstr "Ustawienia drukarki"
@@ -41,13 +41,13 @@ msgctxt "@item:inlistbox"
msgid "G-code File"
msgstr "Pliki G-code"
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:66
msgctxt "@error:not supported"
msgid "GCodeWriter does not support non-text mode."
msgstr "Zapisywacz G-code nie obsługuje trybu nietekstowego."
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73
-#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:72
+#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:88
msgctxt "@warning:status"
msgid "Please prepare G-code before exporting."
msgstr "Przygotuj G-code przed eksportem."
@@ -57,7 +57,7 @@ msgctxt "@info:title"
msgid "3D Model Assistant"
msgstr "Asystent Modelu 3D"
-#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:90
+#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:92
#, python-brace-format
msgctxt "@info:status"
msgid ""
@@ -76,16 +76,6 @@ msgctxt "@action"
msgid "Update Firmware"
msgstr "Aktualizacja Oprogramowania Sprzętowego"
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23
-msgctxt "@item:inmenu"
-msgid "Flatten active settings"
-msgstr "Spłaszczyć aktywne ustawienia"
-
-#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35
-msgctxt "@info:status"
-msgid "Profile has been flattened & activated."
-msgstr "Profil został spłaszczony i aktywowany."
-
#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "AMF File"
@@ -126,21 +116,6 @@ msgctxt "@message"
msgid "Print in Progress"
msgstr "Drukowanie w toku"
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
-msgctxt "X3g Writer Plugin Description"
-msgid "Writes X3g to files"
-msgstr "Zapisuje do plików X3g"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21
-msgctxt "X3g Writer File Description"
-msgid "X3g File"
-msgstr "Plik X3g"
-
-#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15
-msgctxt "X3G Writer File Description"
-msgid "X3G File"
-msgstr "Plik X3G"
-
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17
#: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17
msgctxt "@item:inlistbox"
@@ -212,9 +187,9 @@ msgid "Could not save to removable drive {0}: {1}"
msgstr "Nie można zapisać na wymiennym dysku {0}: {1}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:137
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1634
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:139
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:146
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1668
msgctxt "@info:title"
msgid "Error"
msgstr "Błąd"
@@ -244,8 +219,8 @@ msgstr "Wyjmij urządzenie wymienne {0}"
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163
#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1624
-#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1724
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1658
+#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1758
msgctxt "@info:title"
msgid "Warning"
msgstr "Ostrzeżenie"
@@ -277,17 +252,17 @@ msgctxt "@action"
msgid "Connect via Network"
msgstr "Połącz przez sieć"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:57
msgctxt "@action:button Preceded by 'Ready to'."
msgid "Print over network"
msgstr "Drukuj przez sieć"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:58
msgctxt "@properties:tooltip"
msgid "Print over network"
msgstr "Drukuj przez sieć"
-#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:59
msgctxt "@info:status"
msgid "Connected over the network"
msgstr "Połączone przez sieć"
@@ -302,6 +277,21 @@ msgctxt "@info:title"
msgid "Print error"
msgstr "Błąd druku"
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:21
+msgctxt "@info:title"
+msgid "New cloud printers found"
+msgstr "Znaleziono nowe drukarki w chmurze"
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:22
+msgctxt "@info:message"
+msgid "New printers have been found connected to your account, you can find them in your list of discovered printers."
+msgstr "Nowe drukarki podłączone do Twojego konta zostały znalezione, można je odszukać na liście wykrytych drukarek."
+
+#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py:27
+msgctxt "@info:option_text"
+msgid "Do not show this message again"
+msgstr "Nie pokazuj tego komunikatu ponownie"
+
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
@@ -502,7 +492,7 @@ msgid "GIF Image"
msgstr "Obraz GIF"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
-msgctxt "@item:inlistbox"
+msgctxt "@item:inlistbox 'Open' is part of the name of this file format."
msgid "Open Compressed Triangle Mesh"
msgstr "Otwórz skompresowaną siatkę trójkątów"
@@ -595,12 +585,12 @@ msgctxt "@info:tooltip"
msgid "Configure Per Model Settings"
msgstr "Konfiguruj ustawienia każdego modelu z osobna"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:186
msgctxt "@title:tab"
msgid "Recommended"
msgstr "Zalecane"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177
+#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:188
msgctxt "@title:tab"
msgid "Custom"
msgstr "Niestandardowe"
@@ -611,19 +601,19 @@ msgctxt "@item:inlistbox"
msgid "3MF File"
msgstr "Plik 3MF"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194
-#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:198
+#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:651
msgctxt "@label"
msgid "Nozzle"
msgstr "Dysza"
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:496
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead."
msgstr "Plik projektu {0} zawiera nieznany typ maszyny {1}. Nie można zaimportować maszyny. Zostaną zaimportowane modele."
-#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482
+#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:499
msgctxt "@info:title"
msgid "Open Project File"
msgstr "Otwórz Plik Projektu"
@@ -703,16 +693,6 @@ msgctxt "@item:inlistbox"
msgid "Cura Profile"
msgstr "Profile Cura"
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12
-msgctxt "@item:inmenu"
-msgid "Profile Assistant"
-msgstr "Asystent Profilu"
-
-#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:18
-msgctxt "@item:inlistbox"
-msgid "Profile Assistant"
-msgstr "Asystent Profilu"
-
#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26
msgctxt "@item:inlistbox"
msgid "3MF file"
@@ -733,7 +713,6 @@ msgctxt "@item:inmenu"
msgid "Preview"
msgstr "Podgląd"
-#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:19
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18
msgctxt "@action"
msgid "Select upgrades"
@@ -749,134 +728,148 @@ msgctxt "@info:title"
msgid "Login failed"
msgstr "Logowanie nie powiodło się"
-#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:36
msgctxt "@info:not supported profile"
msgid "Not supported"
msgstr "Niewspierany"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123
+#: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:55
+msgctxt "@info:No intent profile selected"
+msgid "Default"
+msgstr "Domyślne"
+
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:196
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:125
msgctxt "@title:window"
msgid "File Already Exists"
msgstr "Plik już istnieje"
-#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204
-#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124
+#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:197
+#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:126
#, python-brace-format
msgctxt "@label Don't translate the XML tag !"
msgid "The file